Skip to content

Commit

Permalink
Make account required parameter
Browse files Browse the repository at this point in the history
  • Loading branch information
anod committed Dec 11, 2017
1 parent cd6662d commit 04bfd7a
Show file tree
Hide file tree
Showing 18 changed files with 169 additions and 213 deletions.
2 changes: 1 addition & 1 deletion gradlew
Expand Up @@ -105,7 +105,7 @@ if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
fi
fi

# For Darwin, add options to specify how the application appears in the dock
# For Darwin, put options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
Expand Down
6 changes: 3 additions & 3 deletions playstore/src/main/java/finsky/api/DfeApiContext.kt
Expand Up @@ -12,15 +12,15 @@ import finsky.utils.NetworkType
import java.util.HashMap
import java.util.Locale

class DfeApiContext private constructor(internal val context: Context, val account: Account?, private val lastAuthToken: String, deviceId: String,
class DfeApiContext private constructor(internal val context: Context, val account: Account, private val lastAuthToken: String, deviceId: String,
locale: Locale, mccmnc: String,
clientId: String, loggingId: String, filterLevel: Int) {
private val headers: MutableMap<String, String> = HashMap()

internal val accountName: String
get() = if (this.account == null) "" else account.name
get() = account.name

constructor(context: Context, account: Account?, authTokenStr: String, deviceId: String, mccmnc: String, filterLevel: Int) : this(
constructor(context: Context, account: Account, authTokenStr: String, deviceId: String, mccmnc: String, filterLevel: Int) : this(
context, account, authTokenStr, deviceId,
Locale.getDefault(), mccmnc, CLIENT_ID, "", filterLevel
)
Expand Down
Expand Up @@ -2,6 +2,7 @@ package info.anodsplace.playstore

import android.content.Context
import com.android.volley.RequestQueue
import android.accounts.Account

import finsky.api.model.DfeBulkDetails
import finsky.api.model.DfeModel
Expand All @@ -12,9 +13,8 @@ import finsky.api.model.Document
* *
* @date 2015-02-22
*/
class BulkDetailsEndpoint(context: Context, requestQueue: RequestQueue, deviceInfoProvider: DeviceInfoProvider)
: PlayStoreEndpointBase(context, requestQueue, deviceInfoProvider) {
var docIds: List<String> = listOf()
class BulkDetailsEndpoint(context: Context, requestQueue: RequestQueue, deviceInfoProvider: DeviceInfoProvider, account: Account, private var docIds: List<String>)
: PlayStoreEndpointBase(context, requestQueue, deviceInfoProvider, account) {

var bulkData: DfeBulkDetails?
get() = data as? DfeBulkDetails
Expand Down
@@ -1,6 +1,5 @@
package info.anodsplace.playstore

import android.accounts.Account
import android.support.v4.util.SparseArrayCompat

/**
Expand All @@ -15,7 +14,7 @@ open class CompositeEndpoint : PlayStoreEndpoint {
return endpoints.get(id)
}

open fun add(id: Int, endpoint: PlayStoreEndpoint) {
open fun put(id: Int, endpoint: PlayStoreEndpoint) {
endpoints.put(id, endpoint)
}

Expand All @@ -31,15 +30,13 @@ open class CompositeEndpoint : PlayStoreEndpoint {
}
}

override val authSubToken: String
get() = if (endpoints.size() > 0) endpoints.valueAt(0).authSubToken else ""

override fun setAccount(account: Account, authSubToken: String): PlayStoreEndpoint {
for (i in 0 until endpoints.size()) {
endpoints.valueAt(i).setAccount(account, authSubToken)
override var authToken: String
get() = if (endpoints.size() > 0) endpoints.valueAt(0).authToken else ""
set(value) {
for (i in 0 until endpoints.size()) {
endpoints.valueAt(i).authToken = authToken
}
}
return this
}

override fun startAsync() {
for (i in 0 until endpoints.size()) {
Expand Down
Expand Up @@ -11,8 +11,8 @@ import finsky.api.model.DfeModel

class CompositeStateEndpoint(private val compositeListener: Listener) : CompositeEndpoint(), PlayStoreEndpoint.Listener {

override fun add(id: Int, endpoint: PlayStoreEndpoint) {
super.add(id, endpoint)
override fun put(id: Int, endpoint: PlayStoreEndpoint) {
super.put(id, endpoint)
if (activeId == -1) {
activeId = id
}
Expand Down
@@ -1,5 +1,6 @@
package info.anodsplace.playstore

import android.accounts.Account
import android.content.Context
import com.android.volley.RequestQueue

Expand All @@ -13,9 +14,8 @@ import finsky.protos.nano.Messages.AppDetails
* *
* @date 2015-02-22
*/
class DetailsEndpoint(context: Context, requestQueue: RequestQueue, deviceInfoProvider: DeviceInfoProvider)
: PlayStoreEndpointBase(context, requestQueue, deviceInfoProvider) {
var url: String = ""
class DetailsEndpoint(context: Context, requestQueue: RequestQueue, deviceInfoProvider: DeviceInfoProvider, account: Account, private val detailsUrl: String)
: PlayStoreEndpointBase(context, requestQueue, deviceInfoProvider, account) {

var detailsData: DfeDetails?
get() = data as? DfeDetails
Expand All @@ -33,17 +33,17 @@ class DetailsEndpoint(context: Context, requestQueue: RequestQueue, deviceInfoPr
get() = appDetails?.recentChangesHtml ?: ""

override fun executeAsync() {
detailsData?.detailsUrl = url
detailsData?.detailsUrl = detailsUrl
detailsData?.startAsync()
}

override fun executeSync() {
detailsData?.detailsUrl = url
detailsData?.detailsUrl = detailsUrl
detailsData?.startSync()
}

override fun createDfeModel(): DfeModel {
return DfeDetails(dfeApi!!)
return DfeDetails(dfeApi)
}

}
@@ -1,7 +1,5 @@
package info.anodsplace.playstore

import android.accounts.Account

import com.android.volley.VolleyError
import finsky.api.model.DfeModel

Expand All @@ -12,9 +10,7 @@ import finsky.api.model.DfeModel
*/
interface PlayStoreEndpoint {
var listener: Listener?
val authSubToken: String

fun setAccount(account: Account, authSubToken: String): PlayStoreEndpoint
var authToken: String

fun startAsync()
fun startSync()
Expand Down
@@ -1,7 +1,6 @@
package info.anodsplace.playstore

import android.accounts.Account
import android.app.Application
import android.content.Context
import com.android.volley.RequestQueue

Expand All @@ -24,27 +23,26 @@ import info.anodsplace.android.log.AppLog
interface DeviceInfoProvider {
val deviceId: String
val simOperator: String
// App.provide(context).telephonyManager.simOperator
}

abstract class PlayStoreEndpointBase
constructor(context: Context, private val requestQueue: RequestQueue, private val deviceInfoProvider: DeviceInfoProvider) : PlayStoreEndpoint, Response.ErrorListener, OnDataChangedListener {
abstract class PlayStoreEndpointBase(
context: Context,
private val requestQueue: RequestQueue,
private val deviceInfoProvider: DeviceInfoProvider,
private val account: Account) : PlayStoreEndpoint, Response.ErrorListener, OnDataChangedListener {
protected val context: Context = context.applicationContext

final override var authSubToken: String = ""
private set
override var authToken = ""

override var listener: PlayStoreEndpoint.Listener? = null

var data: DfeModel? = null
internal set
var dfeApi: DfeApi? = null
private set
private var account: Account? = null

override fun setAccount(account: Account, authSubToken: String): PlayStoreEndpoint {
this.account = account
this.authSubToken = authSubToken
return this
val dfeApi: DfeApi by lazy {
val deviceId = deviceInfoProvider.deviceId
val simOperator = deviceInfoProvider.simOperator
val dfeApiContext = DfeApiContext(context, account, authToken, deviceId, simOperator, ContentLevel().dfeValue)
DfeApiImpl(requestQueue, dfeApiContext)
}

override fun startAsync() {
Expand All @@ -61,17 +59,8 @@ abstract class PlayStoreEndpointBase
protected abstract fun executeSync()

private fun init() {
if (this.account == null) {
AppLog.e("Account is empty")
}
if (this.authSubToken.isBlank()) {
AppLog.e("Account authentication token is empty")
}
if (dfeApi == null) {
val deviceId = deviceInfoProvider.deviceId
val simOperator = deviceInfoProvider.simOperator
val dfeApiContext = DfeApiContext(context, account, authSubToken, deviceId, simOperator, ContentLevel().dfeValue)
dfeApi = DfeApiImpl(requestQueue, dfeApiContext)
if (this.authToken.isBlank()) {
AppLog.e("Authentication token is empty")
}
if (data == null) {
data = createDfeModel()
Expand All @@ -81,9 +70,7 @@ abstract class PlayStoreEndpointBase
}

override fun reset() {
if (data != null) {
data!!.unregisterAll()
}
data?.unregisterAll()
data = null
}

Expand Down
@@ -1,5 +1,6 @@
package info.anodsplace.playstore

import android.accounts.Account
import android.content.Context
import com.android.volley.RequestQueue

Expand All @@ -12,9 +13,8 @@ import finsky.api.model.DfeSearch
* *
* @date 2015-02-21
*/
class SearchEndpoint(context: Context, requestQueue: RequestQueue, deviceInfoProvider: DeviceInfoProvider, private val autoLoadNextPage: Boolean)
: PlayStoreEndpointBase(context, requestQueue, deviceInfoProvider) {
var query: String = ""
class SearchEndpoint(context: Context, requestQueue: RequestQueue, deviceInfoProvider: DeviceInfoProvider, account: Account, val query: String, private val autoLoadNextPage: Boolean)
: PlayStoreEndpointBase(context, requestQueue, deviceInfoProvider, account) {

var searchData: DfeSearch?
get() = data as? DfeSearch
Expand All @@ -39,6 +39,6 @@ class SearchEndpoint(context: Context, requestQueue: RequestQueue, deviceInfoPro
}

override fun createDfeModel(): DfeModel {
return DfeSearch(dfeApi!!, query, autoLoadNextPage, AppDetailsFilter.predicate)
return DfeSearch(dfeApi, query, autoLoadNextPage, AppDetailsFilter.predicate)
}
}
@@ -1,5 +1,6 @@
package info.anodsplace.playstore

import android.accounts.Account
import android.content.Context
import com.android.volley.RequestQueue

Expand All @@ -11,8 +12,8 @@ import finsky.api.model.DfeModel
* *
* @date 16/12/2016.
*/
class WishlistEndpoint(context: Context, requestQueue: RequestQueue, deviceInfoProvider: DeviceInfoProvider, private val autoloadNext: Boolean)
: PlayStoreEndpointBase(context, requestQueue, deviceInfoProvider) {
class WishlistEndpoint(context: Context, requestQueue: RequestQueue, deviceInfoProvider: DeviceInfoProvider, account: Account, private val autoloadNext: Boolean)
: PlayStoreEndpointBase(context, requestQueue, deviceInfoProvider, account) {

var listData: DfeList?
get() = data as? DfeList
Expand All @@ -37,7 +38,7 @@ class WishlistEndpoint(context: Context, requestQueue: RequestQueue, deviceInfoP
}

override fun createDfeModel(): DfeModel {
return DfeList(dfeApi!!, dfeApi!!.createLibraryUrl(backendId, libraryId, 7, null), autoloadNext, AppDetailsFilter.predicate)
return DfeList(dfeApi, dfeApi.createLibraryUrl(backendId, libraryId, 7, null), autoloadNext, AppDetailsFilter.predicate)
}

companion object {
Expand Down
40 changes: 18 additions & 22 deletions src/main/java/com/anod/appwatcher/details/DetailsActivity.kt
Expand Up @@ -51,29 +51,22 @@ open class DetailsActivity : ToolbarActivity(), PlayStoreEndpoint.Listener, Pale
private var appInfo: AppInfo? = null
private var isNewApp: Boolean = false
private var addMenu: MenuItem? = null
lateinit var iconLoader: PicassoAppIcon
lateinit var detailsEndpoint: DetailsEndpoint
lateinit var dataProvider: AppViewHolderDataProvider
lateinit var appDetailsView: AppDetailsView
var detailsEndpoint: DetailsEndpoint? = null

val iconLoader: PicassoAppIcon by lazy { App.provide(this).iconLoader }
val dataProvider: AppViewHolderDataProvider by lazy { AppViewHolderDataProvider(this, InstalledApps.PackageManager(packageManager)) }
val appDetailsView: AppDetailsView by lazy { AppDetailsView(container, dataProvider) }

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_app_changelog)
setupToolbar()

iconLoader = App.provide(this).iconLoader
appId = intent.getStringExtra(EXTRA_APP_ID) ?: ""
detailsUrl = intent.getStringExtra(EXTRA_DETAILS_URL) ?: ""
val rowId = intent.getIntExtra(EXTRA_ROW_ID, -1)
MetricsManagerEvent(this).track("open_changelog", "DETAILS_APP_ID", appId, "DETAILS_ROW_ID", rowId.toString())

dataProvider = AppViewHolderDataProvider(this, InstalledApps.PackageManager(packageManager))
val contentView = findViewById<View>(R.id.container)
appDetailsView = AppDetailsView(contentView, dataProvider)

detailsEndpoint = DetailsEndpoint(this, App.provide(this).requestQueue, App.provide(this).deviceInfo)
detailsEndpoint.url = detailsUrl

content.visibility = View.INVISIBLE
progressBar.visibility = View.GONE
retryButton.visibility = View.GONE
Expand All @@ -84,7 +77,7 @@ open class DetailsActivity : ToolbarActivity(), PlayStoreEndpoint.Listener, Pale
progressBar.visibility = View.VISIBLE
retryButton.visibility = View.GONE
changelog.visibility = View.GONE
retryButton.postDelayed({ detailsEndpoint.startAsync() }, 500)
retryButton.postDelayed({ detailsEndpoint?.startAsync() }, 500)
}

if (rowId == -1) {
Expand All @@ -108,14 +101,17 @@ open class DetailsActivity : ToolbarActivity(), PlayStoreEndpoint.Listener, Pale

override fun onResume() {
super.onResume()
detailsEndpoint.listener = this
progressBar.visibility = View.VISIBLE

App.provide(this).prefs.account?.let {
AuthTokenAsync(this).request(this, it, object : AuthTokenAsync.Callback {
val requestQueue = App.provide(this).requestQueue
val deviceInfo = App.provide(this).deviceInfo

App.provide(this).prefs.account?.let { account ->
AuthTokenAsync(this).request(this, account, object : AuthTokenAsync.Callback {
override fun onToken(token: String) {
detailsEndpoint.setAccount(it, token)
detailsEndpoint.startAsync()
detailsEndpoint = DetailsEndpoint(this@DetailsActivity, requestQueue, deviceInfo, account, detailsUrl)
detailsEndpoint!!.listener = this@DetailsActivity
detailsEndpoint!!.startAsync()
}

override fun onError(errorMessage: String) {
Expand All @@ -127,7 +123,7 @@ open class DetailsActivity : ToolbarActivity(), PlayStoreEndpoint.Listener, Pale

override fun onPause() {
super.onPause()
detailsEndpoint.listener = null
detailsEndpoint?.listener = null
}

private fun setupAppView(app: AppInfo) {
Expand Down Expand Up @@ -241,7 +237,7 @@ open class DetailsActivity : ToolbarActivity(), PlayStoreEndpoint.Listener, Pale
return true
}
R.id.menu_add -> {
val doc = detailsEndpoint.document
val doc = detailsEndpoint?.document
if (doc != null) {
val info = AppInfo(doc)
val appList = WatchAppList(this)
Expand Down Expand Up @@ -306,13 +302,13 @@ open class DetailsActivity : ToolbarActivity(), PlayStoreEndpoint.Listener, Pale
changelog.autoLinkMask = Linkify.ALL

retryButton.visibility = View.GONE
val changes = detailsEndpoint.recentChanges
val changes = detailsEndpoint?.recentChanges ?: ""
if (changes.isEmpty()) {
changelog.setText(R.string.no_recent_changes)
} else {
changelog.text = Html.parse(changes)
}
if (detailsEndpoint.document != null) {
if (detailsEndpoint?.document != null) {
addMenu!!.isEnabled = true
}
}
Expand Down

0 comments on commit 04bfd7a

Please sign in to comment.