diff options
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/activities')
4 files changed, 65 insertions, 50 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt index 3a01e05b..743ac474 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt @@ -67,8 +67,6 @@ import com.pitchedapps.frost.utils.iab.IabMain import com.pitchedapps.frost.views.BadgedIcon import com.pitchedapps.frost.views.FrostVideoViewer import com.pitchedapps.frost.views.FrostViewPager -import org.jetbrains.anko.doAsync -import org.jetbrains.anko.uiThread /** * Created by Allan Wang on 20/12/17. @@ -94,10 +92,30 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract, override var searchView: SearchView? = null private val searchViewCache = mutableMapOf<String, List<SearchItem>>() - private lateinit var controlWebview: WebView + private var controlWebview: WebView? = null - override fun onCreate(savedInstanceState: Bundle?) { + override final fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + val start = System.currentTimeMillis() + setFrameContentView(Prefs.mainActivityLayout.layoutRes) + setFrostColors { + toolbar(toolbar) + themeWindow = false + header(appBar) + background(viewPager) + } + L.i { "Main AAA ${System.currentTimeMillis() - start} ms" } + setSupportActionBar(toolbar) + adapter = SectionsPagerAdapter(loadFbTabs()) + viewPager.adapter = adapter + viewPager.offscreenPageLimit = TAB_COUNT + L.i { "Main BBB ${System.currentTimeMillis() - start} ms" } + L.i { "Main CCC ${System.currentTimeMillis() - start} ms" } + tabs.setBackgroundColor(Prefs.mainActivityLayout.backgroundColor()) + onNestedCreate(savedInstanceState) + L.i { "Main finished loading UI in ${System.currentTimeMillis() - start} ms" } + controlWebview = WebView(this) + onCreateBilling() if (BuildConfig.VERSION_CODE > Prefs.versionCode) { Prefs.prevVersionCode = Prefs.versionCode Prefs.versionCode = BuildConfig.VERSION_CODE @@ -111,24 +129,15 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract, "Frost id" to Prefs.frostId) } } - controlWebview = WebView(this) - setFrameContentView(Prefs.mainActivityLayout.layoutRes) - setSupportActionBar(toolbar) - adapter = SectionsPagerAdapter(loadFbTabs()) - viewPager.adapter = adapter - viewPager.offscreenPageLimit = TAB_COUNT setupDrawer(savedInstanceState) - - setFrostColors { - toolbar(toolbar) - themeWindow = false - header(appBar) - background(viewPager) - } - tabs.setBackgroundColor(Prefs.mainActivityLayout.backgroundColor()) - onCreateBilling() + L.i { "Main started in ${System.currentTimeMillis() - start} ms" } } + /** + * Injector to handle creation for sub classes + */ + protected abstract fun onNestedCreate(savedInstanceState: Bundle?) + fun tabsForEachView(action: (position: Int, view: BadgedIcon) -> Unit) { (0 until tabs.tabCount).asSequence().forEach { i -> @@ -263,19 +272,20 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract, R.id.action_search to GoogleMaterial.Icon.gmd_search) searchViewBindIfNull { bindSearchView(menu, R.id.action_search, Prefs.iconColor) { - textCallback = { query, _ -> + textCallback = { query, searchView -> val results = searchViewCache[query] if (results != null) - runOnUiThread { searchView?.results = results } - else - doAsync { - val data = SearchParser.query(FbCookie.webCookie, query)?.data?.results ?: return@doAsync + searchView.results = results + else { + val data = SearchParser.query(FbCookie.webCookie, query)?.data?.results + if (data != null) { val items = data.map(FrostSearch::toSearchItem).toMutableList() if (items.isNotEmpty()) items.add(SearchItem("${FbItem._SEARCH.url}?q=$query", string(R.string.show_all_results), iicon = null)) searchViewCache.put(query, items) - uiThread { searchView?.results = items } + searchView.results = items } + } } textDebounceInterval = 300 searchCallback = { query, _ -> launchWebOverlay("${FbItem._SEARCH.url}/?q=$query"); true } @@ -351,12 +361,12 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract, override fun onResume() { super.onResume() - FbCookie.switchBackUser { } - controlWebview.resumeTimers() + FbCookie.switchBackUser {} + controlWebview?.resumeTimers() } override fun onPause() { - controlWebview.pauseTimers() + controlWebview?.pauseTimers() L.v { "Pause main web timers" } super.onPause() } @@ -371,7 +381,7 @@ abstract class BaseMainActivity : BaseActivity(), MainActivityContract, override fun onDestroy() { onDestroyBilling() - controlWebview.destroy() + controlWebview?.destroy() super.onDestroy() } diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/ImageActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/ImageActivity.kt index cdde8311..e563ff8a 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/activities/ImageActivity.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/ImageActivity.kt @@ -88,15 +88,18 @@ class ImageActivity : KauBaseActivity() { val IMAGE_URL: String by lazy { intent.getStringExtra(ARG_IMAGE_URL).trim('"') } - val TEXT: String? by lazy { intent.getStringExtra(ARG_TEXT) } + private val TEXT: String? by lazy { intent.getStringExtra(ARG_TEXT) } // a unique image identifier based on the id (if it exists), and its hash - val IMAGE_HASH: String by lazy { "${Math.abs(FB_IMAGE_ID_MATCHER.find(IMAGE_URL)[1]?.hashCode() ?: 0)}_${Math.abs(IMAGE_URL.hashCode())}" } + private val IMAGE_HASH: String by lazy { + "${Math.abs(FB_IMAGE_ID_MATCHER.find(IMAGE_URL)[1]?.hashCode() ?: 0)}_${Math.abs(IMAGE_URL.hashCode())}" + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) intent?.extras ?: return finish() L.i { "Displaying image" } + L.v { "Displaying image $IMAGE_URL" } val layout = if (!TEXT.isNullOrBlank()) R.layout.activity_image else R.layout.activity_image_textless setContentView(layout) container.setBackgroundColor(Prefs.bgColor.withMinAlpha(222)) @@ -116,6 +119,8 @@ class ImageActivity : KauBaseActivity() { override fun onImageLoadError(e: Exception?) { errorRef = e e.logFrostAnswers("Image load error") + L.e { "Failed to load image $IMAGE_URL" } + tempFile?.delete() fabAction = FabStates.ERROR } }) @@ -125,9 +130,12 @@ class ImageActivity : KauBaseActivity() { doAsync({ L.e(it) { "Failed to load image $IMAGE_HASH" } errorRef = it + runOnUiThread { progress.fadeOut() } + tempFile?.delete() fabAction = FabStates.ERROR }) { loadImage { file -> + uiThread { progress.fadeOut() } if (file == null) { fabAction = FabStates.ERROR return@loadImage @@ -153,11 +161,7 @@ class ImageActivity : KauBaseActivity() { L.d { "Loading from local cache ${local.absolutePath}" } return callback(local) } - val response = Request.Builder() - .url(IMAGE_URL) - .get() - .call() - .execute() + val response = getImageResponse() if (!response.isSuccessful) { L.e { "Unsuccessful response for image" } @@ -198,14 +202,16 @@ class ImageActivity : KauBaseActivity() { return File.createTempFile(imageFileName, IMG_EXTENSION, frostDir) } + private fun getImageResponse() = Request.Builder() + .url(IMAGE_URL) + .get() + .call() + .execute() + @Throws(IOException::class) private fun downloadImageTo(file: File) { - val body = Request.Builder() - .url(IMAGE_URL) - .get() - .call() - .execute() - .body() ?: throw IOException("Failed to retrieve image body") + val body = getImageResponse().body() + ?: throw IOException("Failed to retrieve image body") body.byteStream().use { input -> file.outputStream().use { output -> input.copyTo(output) diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt index e672d7d8..d153b5d9 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt @@ -17,10 +17,9 @@ class MainActivity : BaseMainActivity() { var lastPosition = -1 val headerBadgeObservable = PublishSubject.create<String>()!! - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setupViewPager() + override fun onNestedCreate(savedInstanceState: Bundle?) { setupTabs() + setupViewPager() } private fun setupViewPager() { @@ -63,7 +62,8 @@ class MainActivity : BaseMainActivity() { (tab.customView as BadgedIcon).badgeText = null } }) - headerBadgeObservable.throttleFirst(15, TimeUnit.SECONDS).subscribeOn(Schedulers.newThread()) + headerBadgeObservable.throttleFirst(15, TimeUnit.SECONDS) + .subscribeOn(Schedulers.newThread()) .map { Jsoup.parse(it) } .filter { it.select("[data-sigil=count]").size >= 0 } //ensure headers exist .map { diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt index 1bd3ede2..9fe4ae22 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/WebOverlayActivity.kt @@ -84,7 +84,7 @@ class FrostWebActivity : WebOverlayActivityBase(false) { } else { L.i { "Sharing url through overlay" } L._i { "Url: $url" } - intent.putExtra(ARG_URL, "${FB_URL_BASE}/sharer/sharer.php?u=$url") + intent.putExtra(ARG_URL, "${FB_URL_BASE}sharer/sharer.php?u=$url") return true } } @@ -154,7 +154,6 @@ open class WebOverlayActivityBase(private val forceBasicAgent: Boolean) : BaseAc coordinator.setBackgroundColor(Prefs.bgColor.withAlpha(255)) content.bind(this) - web.reloadBase(true) content.titleObservable .observeOn(AndroidSchedulers.mainThread()) @@ -175,7 +174,7 @@ open class WebOverlayActivityBase(private val forceBasicAgent: Boolean) : BaseAc } FrostRunnable.propagate(this, intent) - L.e { "Done propagation" } + L.v { "Done propagation" } kauSwipeOnCreate { if (!Prefs.overlayFullScreenSwipe) edgeSize = 20.dpToPx @@ -190,8 +189,8 @@ open class WebOverlayActivityBase(private val forceBasicAgent: Boolean) : BaseAc */ override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) - val newUrl = (intent.getStringExtra(ARG_URL) ?: intent.dataString ?: return).formattedFbUrl L.d { "New intent" } + val newUrl = (intent.getStringExtra(ARG_URL) ?: intent.dataString)?.formattedFbUrl ?: return if (baseUrl != newUrl) { this.intent = intent content.baseUrl = newUrl |