From 138824065679d3cd88f7f80d48728ffdc777704a Mon Sep 17 00:00:00 2001 From: Allan Wang Date: Sat, 22 Jul 2017 20:27:22 -0700 Subject: Test new billing logic (#86) * Add lint * Add new libs * Update libs and add friends tab * Aggressively hide nonrecent posts * Update dependencies * Add php to most recents * Add full size image downloader * Fix css cleaner * Fix notification and circle * Bring back regex * Update kau, optimize imports, and remove string ambiguity * Bring back anjlab iab and move to alpha * Create initial billing test --- .../pitchedapps/frost/activities/ImageActivity.kt | 16 +++-- .../pitchedapps/frost/activities/MainActivity.kt | 78 +++++++++++++--------- .../frost/activities/SettingsActivity.kt | 21 +++--- 3 files changed, 64 insertions(+), 51 deletions(-) (limited to 'app/src/main/kotlin/com/pitchedapps/frost/activities') 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 0b8c1a56..79d9f782 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/activities/ImageActivity.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/ImageActivity.kt @@ -1,7 +1,5 @@ package com.pitchedapps.frost.activities -import android.animation.ValueAnimator -import android.annotation.SuppressLint import android.content.Intent import android.content.res.ColorStateList import android.graphics.Bitmap @@ -21,6 +19,7 @@ import ca.allanwang.kau.permissions.PERMISSION_WRITE_EXTERNAL_STORAGE import ca.allanwang.kau.permissions.kauOnRequestPermissionsResult import ca.allanwang.kau.permissions.kauRequestPermissions import ca.allanwang.kau.utils.* +import com.bumptech.glide.Glide import com.bumptech.glide.request.target.BaseTarget import com.bumptech.glide.request.target.SizeReadyCallback import com.bumptech.glide.request.target.Target @@ -31,7 +30,10 @@ import com.mikepenz.google_material_typeface_library.GoogleMaterial import com.mikepenz.iconics.typeface.IIcon import com.pitchedapps.frost.BuildConfig import com.pitchedapps.frost.R -import com.pitchedapps.frost.utils.* +import com.pitchedapps.frost.utils.ARG_IMAGE_URL +import com.pitchedapps.frost.utils.ARG_TEXT +import com.pitchedapps.frost.utils.L +import com.pitchedapps.frost.utils.Prefs import com.sothree.slidinguppanel.SlidingUpPanelLayout import org.jetbrains.anko.doAsync import org.jetbrains.anko.uiThread @@ -82,7 +84,8 @@ class ImageActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(if (!text.isNullOrBlank()) R.layout.activity_image else R.layout.activity_image_textless) + val layout = if (!text.isNullOrBlank()) R.layout.activity_image else R.layout.activity_image_textless + setContentView(layout) container.setBackgroundColor(Prefs.bgColor.withMinAlpha(222)) caption?.setTextColor(Prefs.textColor) caption?.setBackgroundColor(Prefs.bgColor.colorToForeground(0.2f).withAlpha(255)) @@ -104,7 +107,7 @@ class ImageActivity : AppCompatActivity() { imageCallback(null, false) } }) - GlideApp.with(this).asBitmap().load(imageUrl).into(PhotoTarget(this::imageCallback)) + Glide.with(this).asBitmap().load(imageUrl).into(PhotoTarget(this::imageCallback)) } /** @@ -196,7 +199,8 @@ class ImageActivity : AppCompatActivity() { } finally { L.d("Download image async finished: $success") uiThread { - snackbar(if (success) R.string.image_download_success else R.string.image_download_fail) + val text = if (success) R.string.image_download_success else R.string.image_download_fail + snackbar(text) if (success) { deleteTempFile() fabAction = FabStates.SHARE 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 8ca18385..a45bd033 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/MainActivity.kt @@ -9,7 +9,10 @@ import android.net.Uri import android.os.Build import android.os.Bundle import android.support.annotation.StringRes -import android.support.design.widget.* +import android.support.design.widget.AppBarLayout +import android.support.design.widget.CoordinatorLayout +import android.support.design.widget.FloatingActionButton +import android.support.design.widget.TabLayout import android.support.v4.app.ActivityOptionsCompat import android.support.v4.app.Fragment import android.support.v4.app.FragmentManager @@ -52,7 +55,8 @@ import com.pitchedapps.frost.facebook.FbTab import com.pitchedapps.frost.facebook.PROFILE_PICTURE_URL import com.pitchedapps.frost.fragments.WebFragment import com.pitchedapps.frost.utils.* -import com.pitchedapps.frost.utils.iab.validatePro +import com.pitchedapps.frost.utils.iab.FrostBilling +import com.pitchedapps.frost.utils.iab.IABMain import com.pitchedapps.frost.views.BadgedIcon import com.pitchedapps.frost.views.FrostViewPager import com.pitchedapps.frost.web.SearchWebView @@ -64,7 +68,8 @@ import org.jsoup.Jsoup import java.util.concurrent.TimeUnit class MainActivity : BaseActivity(), SearchWebView.SearchContract, - ActivityWebContract, FileChooserContract by FileChooserDelegate() { + ActivityWebContract, FileChooserContract by FileChooserDelegate(), + FrostBilling by IABMain() { lateinit var adapter: SectionsPagerAdapter val toolbar: Toolbar by bindView(R.id.toolbar) @@ -97,12 +102,12 @@ class MainActivity : BaseActivity(), SearchWebView.SearchContract, * Possible responses from the SettingsActivity * after the configurations have changed */ - const val REQUEST_RESTART = 90909 - const val REQUEST_REFRESH = 80808 - const val REQUEST_WEB_ZOOM = 50505 - const val REQUEST_NAV = 10101 - const val REQUEST_SEARCH = 70707 - const val REQUEST_RESTART_APPLICATION = 60606 + const val REQUEST_RESTART_APPLICATION = 1 shl 1 + const val REQUEST_RESTART = 1 shl 2 + const val REQUEST_REFRESH = 1 shl 3 + const val REQUEST_WEB_ZOOM = 1 shl 4 + const val REQUEST_NAV = 1 shl 5 + const val REQUEST_SEARCH = 1 shl 6 } override fun onCreate(savedInstanceState: Bundle?) { @@ -149,12 +154,12 @@ class MainActivity : BaseActivity(), SearchWebView.SearchContract, viewPager.post { webFragmentObservable.onNext(0); lastPosition = 0 } //trigger hook so title is set setupDrawer(savedInstanceState) setupTabs() - fab.setOnClickListener { view -> - Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) - .setAction("Action", null).show() - } +// fab.setOnClickListener { view -> +// Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) +// .setAction("Action", null).show() +// } setFrostColors(toolbar, themeWindow = false, headers = arrayOf(tabs, appBar), backgrounds = arrayOf(viewPager)) - validatePro() + onCreateBilling() } fun tabsForEachView(action: (position: Int, view: BadgedIcon) -> Unit) { @@ -394,26 +399,28 @@ class MainActivity : BaseActivity(), SearchWebView.SearchContract, if (onActivityResultWeb(requestCode, resultCode, data)) return super.onActivityResult(requestCode, resultCode, data) if (requestCode == ACTIVITY_SETTINGS) { - when (resultCode) { - REQUEST_RESTART -> restart() - REQUEST_REFRESH -> webFragmentObservable.onNext(WebFragment.REQUEST_REFRESH) - REQUEST_NAV -> frostNavigationBar() - REQUEST_WEB_ZOOM -> webFragmentObservable.onNext(WebFragment.REQUEST_TEXT_ZOOM) - REQUEST_SEARCH -> invalidateOptionsMenu() - REQUEST_RESTART_APPLICATION -> { //completely restart application - L.d("Restart Application Requested") - val intent = packageManager.getLaunchIntentForPackage(packageName) - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK) - val pending = PendingIntent.getActivity(this, 666, intent, PendingIntent.FLAG_CANCEL_CURRENT) - val alarm = getSystemService(Context.ALARM_SERVICE) as AlarmManager - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) - alarm.setExactAndAllowWhileIdle(AlarmManager.RTC, System.currentTimeMillis() + 100, pending) - else - alarm.setExact(AlarmManager.RTC, System.currentTimeMillis() + 100, pending) - finish() - System.exit(0) - } + if (resultCode and REQUEST_RESTART_APPLICATION > 0) { //completely restart application + L.d("Restart Application Requested") + val intent = packageManager.getLaunchIntentForPackage(packageName) + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK) + val pending = PendingIntent.getActivity(this, 666, intent, PendingIntent.FLAG_CANCEL_CURRENT) + val alarm = getSystemService(Context.ALARM_SERVICE) as AlarmManager + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) + alarm.setExactAndAllowWhileIdle(AlarmManager.RTC, System.currentTimeMillis() + 100, pending) + else + alarm.setExact(AlarmManager.RTC, System.currentTimeMillis() + 100, pending) + finish() + System.exit(0) + return } + if (resultCode and REQUEST_RESTART > 0) return restart() + /* + * These results can be stacked + */ + if (resultCode and REQUEST_REFRESH > 0) webFragmentObservable.onNext(WebFragment.REQUEST_REFRESH) + if (resultCode and REQUEST_NAV > 0) frostNavigationBar() + if (resultCode and REQUEST_WEB_ZOOM > 0) webFragmentObservable.onNext(WebFragment.REQUEST_TEXT_ZOOM) + if (resultCode and REQUEST_SEARCH > 0) invalidateOptionsMenu() } } @@ -435,6 +442,11 @@ class MainActivity : BaseActivity(), SearchWebView.SearchContract, super.onStart() } + override fun onDestroy() { + onDestroyBilling() + super.onDestroy() + } + override fun onBackPressed() { if (searchView?.onBackPressed() ?: false) return if (currentFragment.onBackPressed()) return diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/SettingsActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/SettingsActivity.kt index c40a705f..a7ca6ce5 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/SettingsActivity.kt @@ -17,27 +17,23 @@ import com.pitchedapps.frost.BuildConfig import com.pitchedapps.frost.R import com.pitchedapps.frost.settings.* import com.pitchedapps.frost.utils.* -import com.pitchedapps.frost.utils.iab.* +import com.pitchedapps.frost.utils.iab.FrostBilling +import com.pitchedapps.frost.utils.iab.IABSettings +import com.pitchedapps.frost.utils.iab.IS_FROST_PRO /** * Created by Allan Wang on 2017-06-06. */ -class SettingsActivity : KPrefActivity(), IabBroadcastReceiver.IabBroadcastListener { +class SettingsActivity : KPrefActivity(), FrostBilling by IABSettings() { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (!IAB.handleActivityResult(requestCode, resultCode, data)) { + if (!onActivityResultBilling(requestCode, resultCode, data)) { super.onActivityResult(requestCode, resultCode, data) adapter.notifyDataSetChanged() } } - - override fun receivedBroadcast() { - L.d("IAB broadcast") - adapter.notifyDataSetChanged() - } - override fun kPrefCoreAttributes(): CoreAttributeContract.() -> Unit = { textColor = { Prefs.textColor } accentColor = { Prefs.accentColor } @@ -72,7 +68,7 @@ class SettingsActivity : KPrefActivity(), IabBroadcastReceiver.IabBroadcastListe plainText(R.string.restore_purchases) { descRes = R.string.restore_purchases_desc iicon = GoogleMaterial.Icon.gmd_refresh - onClick = { _, _, _ -> this@SettingsActivity.restorePurchases(); true } + onClick = { _, _, _ -> restorePurchases(false); true } } plainText(R.string.about_frost) { @@ -86,7 +82,7 @@ class SettingsActivity : KPrefActivity(), IabBroadcastReceiver.IabBroadcastListe } fun KPrefItemBase.BaseContract<*>.dependsOnPro() { - onDisabledClick = { _, _, _ -> openPlayProPurchase(0); true } + onDisabledClick = { _, _, _ -> purchasePro(); true } enabler = { IS_FROST_PRO } } @@ -99,6 +95,7 @@ class SettingsActivity : KPrefActivity(), IabBroadcastReceiver.IabBroadcastListe super.onCreate(savedInstanceState) animate = Prefs.animate themeExterior(false) + onCreateBilling() } fun themeExterior(animate: Boolean = true) { @@ -139,7 +136,7 @@ class SettingsActivity : KPrefActivity(), IabBroadcastReceiver.IabBroadcastListe } override fun onDestroy() { - IAB.dispose() + onDestroyBilling() super.onDestroy() } } \ No newline at end of file -- cgit v1.2.3