mirror of
https://github.com/k0shk0sh/FastHub.git
synced 2026-01-25 14:47:05 +00:00
releasing 4.5.5
This commit is contained in:
parent
630aed3eef
commit
793ffd663e
@ -29,8 +29,8 @@ android {
|
||||
applicationId "com.fastaccess.github"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 26
|
||||
versionCode 453
|
||||
versionName "4.5.3"
|
||||
versionCode 455
|
||||
versionName "4.5.5"
|
||||
buildConfigString "GITHUB_CLIENT_ID", (buildProperties.secrets['github_client_id'] | buildProperties.notThere['github_client_id']).string
|
||||
buildConfigString "GITHUB_SECRET", (buildProperties.secrets['github_secret'] | buildProperties.notThere['github_secret']).string
|
||||
buildConfigString "IMGUR_CLIENT_ID", (buildProperties.secrets['imgur_client_id'] | buildProperties.notThere['imgur_client_id']).string
|
||||
@ -129,7 +129,7 @@ dependencies {
|
||||
implementation "com.squareup.retrofit2:retrofit:${retrofit}"
|
||||
implementation "com.squareup.retrofit2:converter-gson:${retrofit}"
|
||||
implementation "com.squareup.retrofit2:adapter-rxjava2:${retrofit}"
|
||||
implementation "com.github.bumptech.glide:glide:3.7.0"
|
||||
implementation "com.github.bumptech.glide:glide:${glideVersion}"
|
||||
implementation 'cn.gavinliu.android.lib:ShapedImageView:0.8.3'
|
||||
implementation "com.jakewharton:butterknife:${butterKnifeVersion}"
|
||||
implementation 'it.sephiroth.android.library.bottomnavigation:bottom-navigation:2.0.2'
|
||||
@ -152,6 +152,7 @@ dependencies {
|
||||
implementation "com.atlassian.commonmark:commonmark-ext-gfm-tables:${commonmark}"
|
||||
implementation "com.atlassian.commonmark:commonmark-ext-ins:${commonmark}"
|
||||
implementation "com.atlassian.commonmark:commonmark-ext-yaml-front-matter:${commonmark}"
|
||||
implementation "com.google.firebase:firebase-core:${gms}"
|
||||
implementation "com.google.firebase:firebase-messaging:${gms}"
|
||||
implementation "com.google.firebase:firebase-database:${gms}"
|
||||
implementation "com.google.android.gms:play-services-base:${gms}"
|
||||
@ -182,8 +183,8 @@ dependencies {
|
||||
testImplementation "org.assertj:assertj-core:${assertjVersion}"
|
||||
androidTestImplementation "com.android.support:support-annotations:${supportVersion}"
|
||||
androidTestImplementation "org.mockito:mockito-core:${mockitoVersion}"
|
||||
androidTestImplementation 'com.android.support.test:runner:0.5'
|
||||
androidTestImplementation 'com.android.support.test:rules:0.5'
|
||||
androidTestImplementation 'com.android.support.test:runner:1.0.1'
|
||||
androidTestImplementation 'com.android.support.test:rules:1.0.1'
|
||||
androidTestImplementation "com.android.support.test.espresso:espresso-intents:${espresseVersion}"
|
||||
androidTestImplementation "com.android.support.test.espresso:espresso-core:${espresseVersion}"
|
||||
}
|
||||
|
||||
@ -43,7 +43,7 @@ public class App extends Application {
|
||||
}
|
||||
|
||||
private void init() {
|
||||
FabricProvider.initFabric(this);
|
||||
FabricProvider.INSTANCE.initFabric(this);
|
||||
RxBillingService.register(this);
|
||||
deleteDatabase("database.db");
|
||||
getDataStore();
|
||||
|
||||
@ -143,22 +143,42 @@ public class Bundler {
|
||||
}
|
||||
|
||||
public Bundler put(@NonNull String key, Parcelable value) {
|
||||
bundle.putParcelable(key, value);
|
||||
Bundle safeBundle = new Bundle();
|
||||
safeBundle.putParcelable(key, value);
|
||||
if (isValidBundleSize(safeBundle)) {
|
||||
bundle.putParcelable(key, value);
|
||||
}
|
||||
clearBundle(safeBundle);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Bundler put(@NonNull String key, Parcelable[] value) {
|
||||
bundle.putParcelableArray(key, value);
|
||||
Bundle safeBundle = new Bundle();
|
||||
safeBundle.putParcelableArray(key, value);
|
||||
if (isValidBundleSize(safeBundle)) {
|
||||
bundle.putParcelableArray(key, value);
|
||||
}
|
||||
clearBundle(safeBundle);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Bundler putParcelableArrayList(@NonNull String key, ArrayList<? extends Parcelable> value) {
|
||||
bundle.putParcelableArrayList(key, value);
|
||||
Bundle safeBundle = new Bundle();
|
||||
safeBundle.putParcelableArrayList(key, value);
|
||||
if (isValidBundleSize(safeBundle)) {
|
||||
bundle.putParcelableArrayList(key, value);
|
||||
}
|
||||
clearBundle(safeBundle);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Bundler putSparseParcelableArray(@NonNull String key, SparseArray<? extends Parcelable> value) {
|
||||
bundle.putSparseParcelableArray(key, value);
|
||||
Bundle safeBundle = new Bundle();
|
||||
safeBundle.putSparseParcelableArray(key, value);
|
||||
if (isValidBundleSize(safeBundle)) {
|
||||
bundle.putSparseParcelableArray(key, value);
|
||||
}
|
||||
clearBundle(safeBundle);
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -173,7 +193,12 @@ public class Bundler {
|
||||
}
|
||||
|
||||
public Bundler put(@NonNull String key, Serializable value) {
|
||||
bundle.putSerializable(key, value);
|
||||
Bundle safeBundle = new Bundle();
|
||||
safeBundle.putSerializable(key, value);
|
||||
if (isValidBundleSize(safeBundle)) {
|
||||
bundle.putSerializable(key, value);
|
||||
}
|
||||
clearBundle(safeBundle);
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -206,4 +231,9 @@ public class Bundler {
|
||||
return parcel.dataSize() < 500000;
|
||||
}
|
||||
|
||||
private void clearBundle(Bundle safeBundle) {
|
||||
safeBundle.clear();
|
||||
safeBundle = null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -58,7 +58,8 @@ public class PrefHelper {
|
||||
}
|
||||
|
||||
public static int getInt(@NonNull String key) {
|
||||
return PreferenceManager.getDefaultSharedPreferences(App.getInstance()).getInt(key, 0);
|
||||
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(App.getInstance());
|
||||
return preferences.getAll().get(key) instanceof Integer ? preferences.getInt(key, 0) : -1;
|
||||
}
|
||||
|
||||
public static long getLong(@NonNull String key) {
|
||||
|
||||
@ -1,33 +0,0 @@
|
||||
package com.fastaccess.provider.fabric;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
import com.crashlytics.android.Crashlytics;
|
||||
import com.crashlytics.android.answers.Answers;
|
||||
import com.crashlytics.android.answers.PurchaseEvent;
|
||||
import com.crashlytics.android.core.CrashlyticsCore;
|
||||
import com.fastaccess.BuildConfig;
|
||||
|
||||
import io.fabric.sdk.android.Fabric;
|
||||
|
||||
/**
|
||||
* Created by kosh on 14/08/2017.
|
||||
*/
|
||||
|
||||
public class FabricProvider {
|
||||
|
||||
public static void initFabric(@NonNull Context context) {
|
||||
Fabric fabric = new Fabric.Builder(context)
|
||||
.kits(new Crashlytics.Builder()
|
||||
.core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
|
||||
.build())
|
||||
.debuggable(BuildConfig.DEBUG)
|
||||
.build();
|
||||
Fabric.with(fabric);
|
||||
}
|
||||
|
||||
public static void logPurchase(@NonNull String productKey) {
|
||||
Answers.getInstance().logPurchase(new PurchaseEvent().putItemName(productKey).putSuccess(true));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,41 @@
|
||||
package com.fastaccess.provider.fabric
|
||||
|
||||
import android.content.Context
|
||||
import com.crashlytics.android.Crashlytics
|
||||
import com.crashlytics.android.answers.Answers
|
||||
import com.crashlytics.android.answers.PurchaseEvent
|
||||
import com.crashlytics.android.core.CrashlyticsCore
|
||||
import com.fastaccess.BuildConfig
|
||||
import io.fabric.sdk.android.Fabric
|
||||
import java.math.BigDecimal
|
||||
|
||||
/**
|
||||
* Created by kosh on 14/08/2017.
|
||||
*/
|
||||
|
||||
object FabricProvider {
|
||||
|
||||
fun initFabric(context: Context) {
|
||||
val fabric = Fabric.Builder(context)
|
||||
.kits(Crashlytics.Builder()
|
||||
.core(CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
|
||||
.build())
|
||||
.debuggable(BuildConfig.DEBUG)
|
||||
.build()
|
||||
Fabric.with(fabric)
|
||||
}
|
||||
|
||||
fun logPurchase(productKey: String, price: Long? = null, priceText: String? = null) {
|
||||
val purchaseEvent = PurchaseEvent()
|
||||
.putItemName(productKey)
|
||||
.putSuccess(true)
|
||||
|
||||
priceText?.let {
|
||||
purchaseEvent.putItemType(priceText)
|
||||
}
|
||||
price?.let {
|
||||
purchaseEvent.putItemPrice(BigDecimal(price))
|
||||
}
|
||||
Answers.getInstance().logPurchase(purchaseEvent)
|
||||
}
|
||||
}
|
||||
@ -276,7 +276,7 @@ public class SchemeParser {
|
||||
String owner = segments.get(0);
|
||||
String repoName = segments.get(1);
|
||||
if (!InputHelper.isEmpty(repoName)) {
|
||||
repoName = repoName.replace(".git", "");
|
||||
if (repoName.endsWith(".git")) repoName = repoName.replace(".git", "");
|
||||
}
|
||||
if (segments.size() == 3) {
|
||||
String lastPath = uri.getLastPathSegment();
|
||||
|
||||
@ -40,12 +40,14 @@ class DonateActivity : BaseActivity<BaseMvp.FAView, BasePresenter<BaseMvp.FAView
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
val bundle: Bundle = intent.extras
|
||||
val productKey: String = bundle.getString(BundleConstant.EXTRA)
|
||||
val productKey = bundle.getString(BundleConstant.EXTRA)
|
||||
val price = bundle.getLong(BundleConstant.EXTRA_FOUR, 0)
|
||||
val priceText = bundle.getString(BundleConstant.EXTRA_FIVE)
|
||||
subscription = RxHelper.getSingle<Purchase>(RxBillingService.getInstance(this, BuildConfig.DEBUG)
|
||||
.purchase(ProductType.IN_APP, productKey, "inapp:com.fastaccess.github:" + productKey))
|
||||
.subscribe({ p: Purchase?, throwable: Throwable? ->
|
||||
if (throwable == null) {
|
||||
FabricProvider.logPurchase(productKey)
|
||||
FabricProvider.logPurchase(productKey, price, priceText)
|
||||
showMessage(R.string.success, R.string.success_purchase_message)
|
||||
enableProduct(productKey, applicationContext)
|
||||
val intent = Intent()
|
||||
@ -77,18 +79,22 @@ class DonateActivity : BaseActivity<BaseMvp.FAView, BasePresenter<BaseMvp.FAView
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun start(context: Activity, product: String?) {
|
||||
fun start(context: Activity, product: String?, price: Long? = 0, priceText: String? = null) {
|
||||
val intent = Intent(context, DonateActivity::class.java)
|
||||
intent.putExtras(Bundler.start()
|
||||
.put(BundleConstant.EXTRA, product)
|
||||
.put(BundleConstant.EXTRA_FOUR, price)
|
||||
.put(BundleConstant.EXTRA_FIVE, priceText)
|
||||
.end())
|
||||
context.startActivityForResult(intent, BundleConstant.REQUEST_CODE)
|
||||
}
|
||||
|
||||
fun start(context: Fragment, product: String?) {
|
||||
fun start(context: Fragment, product: String?, price: Long? = 0, priceText: String? = null) {
|
||||
val intent = Intent(context.context, DonateActivity::class.java)
|
||||
intent.putExtras(Bundler.start()
|
||||
.put(BundleConstant.EXTRA, product)
|
||||
.put(BundleConstant.EXTRA_FOUR, price)
|
||||
.put(BundleConstant.EXTRA_FIVE, priceText)
|
||||
.end())
|
||||
context.startActivityForResult(intent, BundleConstant.REQUEST_CODE)
|
||||
}
|
||||
|
||||
@ -79,7 +79,7 @@ public class DonationActivity extends BaseActivity {
|
||||
|
||||
private void onProceed(@NonNull String productKey) {
|
||||
if (AppHelper.isGoogleAvailable(this)) {
|
||||
DonateActivity.Companion.start(this, productKey);
|
||||
DonateActivity.Companion.start(this, productKey, null, null);
|
||||
} else {
|
||||
showErrorMessage(getString(R.string.google_play_service_error));
|
||||
}
|
||||
|
||||
@ -4,23 +4,27 @@ import android.animation.Animator
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.support.transition.TransitionManager
|
||||
import android.view.View
|
||||
import android.widget.Button
|
||||
import android.widget.EditText
|
||||
import android.widget.FrameLayout
|
||||
import android.widget.TextView
|
||||
import butterknife.BindView
|
||||
import butterknife.OnClick
|
||||
import butterknife.OnEditorAction
|
||||
import com.airbnb.lottie.LottieAnimationView
|
||||
import com.fastaccess.BuildConfig
|
||||
import com.fastaccess.R
|
||||
import com.fastaccess.helper.AppHelper
|
||||
import com.fastaccess.helper.InputHelper
|
||||
import com.fastaccess.helper.PrefGetter
|
||||
import com.fastaccess.helper.ViewHelper
|
||||
import com.fastaccess.helper.*
|
||||
import com.fastaccess.provider.fabric.FabricProvider
|
||||
import com.fastaccess.ui.base.BaseActivity
|
||||
import com.fastaccess.ui.modules.main.donation.DonateActivity
|
||||
import com.miguelbcr.io.rx_billing_service.RxBillingService
|
||||
import com.miguelbcr.io.rx_billing_service.entities.ProductType
|
||||
import io.reactivex.Observable
|
||||
import io.reactivex.disposables.Disposable
|
||||
|
||||
/**
|
||||
* Created by kosh on 13/07/2017.
|
||||
@ -32,6 +36,13 @@ class PremiumActivity : BaseActivity<PremiumMvp.View, PremiumPresenter>(), Premi
|
||||
@BindView(R.id.progressLayout) lateinit var progressLayout: View
|
||||
@BindView(R.id.successActivationView) lateinit var successActivationView: LottieAnimationView
|
||||
@BindView(R.id.successActivationHolder) lateinit var successActivationHolder: View
|
||||
@BindView(R.id.proPrice) lateinit var proPriceText: TextView
|
||||
@BindView(R.id.enterprisePrice) lateinit var enterpriseText: TextView
|
||||
@BindView(R.id.buyAll) lateinit var buyAll: Button
|
||||
private var disposable: Disposable? = null
|
||||
private val allFeaturesKey by lazy { getString(R.string.fasthub_all_features_purchase) }
|
||||
private val enterpriseKey by lazy { getString(R.string.fasthub_enterprise_purchase) }
|
||||
private val proKey by lazy { getString(R.string.fasthub_pro_purchase) }
|
||||
|
||||
override fun layout(): Int = R.layout.pro_features_layout
|
||||
|
||||
@ -45,17 +56,20 @@ class PremiumActivity : BaseActivity<PremiumMvp.View, PremiumPresenter>(), Premi
|
||||
|
||||
@OnClick(R.id.buyAll) fun onBuyAll() {
|
||||
if (!isGoogleSupported()) return
|
||||
DonateActivity.Companion.start(this, getString(R.string.fasthub_all_features_purchase))
|
||||
val price = buyAll.tag as? Long?
|
||||
DonateActivity.Companion.start(this, allFeaturesKey, price, buyAll.text.toString())
|
||||
}
|
||||
|
||||
@OnClick(R.id.buyPro) fun onBuyPro() {
|
||||
if (!isGoogleSupported()) return
|
||||
DonateActivity.Companion.start(this, getString(R.string.fasthub_pro_purchase))
|
||||
val price = proPriceText.tag as? Long?
|
||||
DonateActivity.Companion.start(this, proKey, price, proPriceText.text.toString())
|
||||
}
|
||||
|
||||
@OnClick(R.id.buyEnterprise) fun onBuyEnterprise() {
|
||||
if (!isGoogleSupported()) return
|
||||
DonateActivity.Companion.start(this, getString(R.string.fasthub_enterprise_purchase))
|
||||
val price = enterpriseText.tag as? Long?
|
||||
DonateActivity.Companion.start(this, enterpriseKey, price, enterpriseText.text.toString())
|
||||
}
|
||||
|
||||
@OnClick(R.id.unlock) fun onUnlock() {
|
||||
@ -80,6 +94,32 @@ class PremiumActivity : BaseActivity<PremiumMvp.View, PremiumPresenter>(), Premi
|
||||
|
||||
@OnClick(R.id.close) fun onClose() = finish()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
buyAll.text = getString(R.string.purchase_all).replace("%price%", "$7.99")
|
||||
RxHelper.getObservable(RxBillingService.getInstance(this, BuildConfig.DEBUG)
|
||||
.getSkuDetails(ProductType.IN_APP, arrayListOf(enterpriseKey, proKey, allFeaturesKey))
|
||||
.toObservable())
|
||||
.flatMap { Observable.fromIterable(it) }
|
||||
.subscribe({
|
||||
Logger.e(it.sku(), it.price(), it.priceCurrencyCode(), it.priceAmountMicros())
|
||||
when (it.sku()) {
|
||||
enterpriseKey -> {
|
||||
enterpriseText.text = it.price()
|
||||
enterpriseText.tag = it.priceAmountMicros()
|
||||
}
|
||||
proKey -> {
|
||||
proPriceText.text = it.price()
|
||||
proPriceText.tag = it.priceAmountMicros()
|
||||
}
|
||||
allFeaturesKey -> {
|
||||
buyAll.text = getString(R.string.purchase_all).replace("%price%", it.price())
|
||||
buyAll.tag = it.priceAmountMicros()
|
||||
}
|
||||
}
|
||||
}, { t -> t.printStackTrace() })
|
||||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
super.onActivityResult(requestCode, resultCode, data)
|
||||
if (resultCode == Activity.RESULT_OK) {
|
||||
@ -94,6 +134,7 @@ class PremiumActivity : BaseActivity<PremiumMvp.View, PremiumPresenter>(), Premi
|
||||
}
|
||||
|
||||
override fun onSuccessfullyActivated() {
|
||||
ViewHelper.hideKeyboard(editText)
|
||||
hideProgress()
|
||||
successActivationHolder.visibility = View.VISIBLE
|
||||
FabricProvider.logPurchase(InputHelper.toString(editText))
|
||||
@ -127,6 +168,12 @@ class PremiumActivity : BaseActivity<PremiumMvp.View, PremiumPresenter>(), Premi
|
||||
progressLayout.visibility = View.GONE
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
val disposable = disposable
|
||||
if (disposable != null && !disposable.isDisposed) disposable.dispose()
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
private fun isGoogleSupported(): Boolean {
|
||||
if (AppHelper.isGoogleAvailable(this)) {
|
||||
return true
|
||||
|
||||
@ -27,7 +27,7 @@ class RepoLicenseBottomSheet : BaseMvpBottomSheetDialogFragment<RepoLicenseMvp.V
|
||||
@BindView(R.id.readmeLoader) lateinit var loader: ProgressBar
|
||||
@BindView(R.id.webView) lateinit var webView: PrettifyWebView
|
||||
@BindView(R.id.licenseName) lateinit var licenseName: TextView
|
||||
|
||||
|
||||
override fun providePresenter(): RepoLicensePresenter = RepoLicensePresenter()
|
||||
|
||||
override fun onLicenseLoaded(license: String) {
|
||||
@ -59,6 +59,7 @@ class RepoLicenseBottomSheet : BaseMvpBottomSheetDialogFragment<RepoLicenseMvp.V
|
||||
}
|
||||
|
||||
override fun onContentChanged(progress: Int) {
|
||||
val loader: ProgressBar? = loader
|
||||
loader?.let {
|
||||
it.progress = progress
|
||||
if (progress == 100) {
|
||||
|
||||
@ -258,8 +258,10 @@ class IssuePagerPresenter extends BasePresenter<IssuePagerMvp.View> implements I
|
||||
}
|
||||
|
||||
private void getIssueFromApi() {
|
||||
Login loginUser = Login.getUser();
|
||||
if (loginUser == null) return;
|
||||
makeRestCall(RxHelper.getObservable(Observable.zip(RestProvider.getIssueService(isEnterprise()).getIssue(login, repoId, issueNumber),
|
||||
RestProvider.getRepoService(isEnterprise()).isCollaborator(login, repoId, Login.getUser().getLogin()),
|
||||
RestProvider.getRepoService(isEnterprise()).isCollaborator(login, repoId, loginUser.getLogin()),
|
||||
(issue, booleanResponse) -> {
|
||||
isCollaborator = booleanResponse.code() == 204;
|
||||
return issue;
|
||||
|
||||
@ -33,7 +33,6 @@ import com.fastaccess.ui.base.BaseFragment;
|
||||
import com.fastaccess.ui.modules.main.MainActivity;
|
||||
import com.fastaccess.ui.modules.profile.org.repos.OrgReposFragment;
|
||||
import com.fastaccess.ui.modules.profile.repos.ProfileReposFragment;
|
||||
import com.fastaccess.ui.modules.search.SearchUserActivity;
|
||||
import com.fastaccess.ui.widgets.SpannableBuilder;
|
||||
import com.fastaccess.ui.widgets.ViewPagerView;
|
||||
|
||||
@ -258,6 +257,19 @@ public class UserPagerActivity extends BaseActivity<UserPagerMvp.View, UserPager
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Override public boolean onPrepareOptionsMenu(Menu menu) {
|
||||
// final int blockId = 10110;
|
||||
// MenuItem blockItem;
|
||||
// if (menu.findItem(blockId) == null) {
|
||||
// blockItem = menu.add(0, blockId, 0, getString(R.string.block));
|
||||
// } else {
|
||||
// blockItem = menu.findItem(blockId);
|
||||
// }
|
||||
// blockItem.setIcon(ContextCompat.getDrawable(this, R.drawable.ic_block))
|
||||
// .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
|
||||
return super.onPrepareOptionsMenu(menu);
|
||||
}
|
||||
|
||||
private void hideShowFab(int position) {
|
||||
if (isOrg) {
|
||||
if (getPresenter().getIsMember() == 1) {
|
||||
|
||||
@ -93,4 +93,5 @@ public class FontTextView extends AppCompatTextView {
|
||||
ViewHelper.tintDrawable(drawable, ViewHelper.getTertiaryTextColor(getContext()));
|
||||
setCompoundDrawablesWithIntrinsicBounds(sd, null, null, null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -109,6 +109,11 @@ public class PrettifyWebView extends NestedWebView {
|
||||
}
|
||||
}
|
||||
|
||||
@Override protected void onDetachedFromWindow() {
|
||||
onContentChangedListener = null;
|
||||
super.onDetachedFromWindow();
|
||||
}
|
||||
|
||||
private boolean hitLinkResult(WebView.HitTestResult result) {
|
||||
return result.getType() == WebView.HitTestResult.SRC_ANCHOR_TYPE || result.getType() == HitTestResult.IMAGE_TYPE ||
|
||||
result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE;
|
||||
|
||||
9
app/src/main/res/drawable/ic_block.xml
Normal file
9
app/src/main/res/drawable/ic_block.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportHeight="24.0"
|
||||
android:viewportWidth="24.0">
|
||||
<path
|
||||
android:fillColor="?icon_color"
|
||||
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM4,12c0,-4.42 3.58,-8 8,-8 1.85,0 3.55,0.63 4.9,1.69L5.69,16.9C4.63,15.55 4,13.85 4,12zM12,20c-1.85,0 -3.55,-0.63 -4.9,-1.69L18.31,7.1C19.37,8.45 20,10.15 20,12c0,4.42 -3.58,8 -8,8z"/>
|
||||
</vector>
|
||||
@ -7,106 +7,136 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/window_background"
|
||||
android:focusableInTouchMode="true"
|
||||
android:orientation="vertical">
|
||||
|
||||
<include layout="@layout/appbar_elevation_dark"/>
|
||||
|
||||
|
||||
<android.support.v7.widget.CardView
|
||||
android:id="@+id/commitHolder"
|
||||
<android.support.design.widget.CoordinatorLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/spacing_micro"
|
||||
android:layout_marginTop="@dimen/spacing_micro"
|
||||
app:cardBackgroundColor="?card_background"
|
||||
app:contentPaddingBottom="@dimen/spacing_normal"
|
||||
app:contentPaddingLeft="@dimen/spacing_xs_large"
|
||||
app:contentPaddingRight="@dimen/spacing_xs_large"
|
||||
app:contentPaddingTop="@dimen/spacing_normal">
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/description"
|
||||
<android.support.design.widget.AppBarLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:hintTextAppearance="@style/TextAppearance.AppCompat.Title">
|
||||
android:elevation="0dp"
|
||||
android:stateListAnimator="@null"
|
||||
android:theme="?android:toolbarStyle"
|
||||
app:elevation="0dp">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/commit_message"
|
||||
android:inputType="textMultiLine|textCapSentences"
|
||||
android:maxLines="3"/>
|
||||
android:orientation="vertical"
|
||||
app:layout_scrollFlags="scroll|enterAlways">
|
||||
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
</android.support.v7.widget.CardView>
|
||||
<android.support.v7.widget.CardView
|
||||
android:id="@+id/commitHolder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/spacing_micro"
|
||||
android:layout_marginTop="@dimen/spacing_normal"
|
||||
app:cardBackgroundColor="?card_background"
|
||||
app:contentPaddingBottom="@dimen/spacing_normal"
|
||||
app:contentPaddingLeft="@dimen/spacing_xs_large"
|
||||
app:contentPaddingRight="@dimen/spacing_xs_large"
|
||||
app:contentPaddingTop="@dimen/spacing_normal">
|
||||
|
||||
<android.support.v7.widget.CardView
|
||||
android:id="@+id/fileNameHolder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/spacing_micro"
|
||||
android:layout_marginTop="@dimen/spacing_micro"
|
||||
app:cardBackgroundColor="?card_background"
|
||||
app:contentPaddingBottom="@dimen/spacing_normal"
|
||||
app:contentPaddingLeft="@dimen/spacing_xs_large"
|
||||
app:contentPaddingRight="@dimen/spacing_xs_large"
|
||||
app:contentPaddingTop="@dimen/spacing_normal">
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:hintTextAppearance="@style/TextAppearance.AppCompat.Title">
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/fileName"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:hintTextAppearance="@style/TextAppearance.AppCompat.Title">
|
||||
<android.support.design.widget.TextInputEditText
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/commit_message"
|
||||
android:inputType="textMultiLine|textCapSentences"
|
||||
android:maxLines="3"/>
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/file_name_hint"
|
||||
android:inputType="text"
|
||||
android:maxLines="1"/>
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
</android.support.v7.widget.CardView>
|
||||
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
</android.support.v7.widget.CardView>
|
||||
<android.support.v7.widget.CardView
|
||||
android:id="@+id/fileNameHolder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/spacing_micro"
|
||||
android:layout_marginTop="@dimen/spacing_micro"
|
||||
app:cardBackgroundColor="?card_background"
|
||||
app:cardElevation="0dp"
|
||||
app:contentPaddingBottom="@dimen/spacing_normal"
|
||||
app:contentPaddingLeft="@dimen/spacing_xs_large"
|
||||
app:contentPaddingRight="@dimen/spacing_xs_large"
|
||||
app:contentPaddingTop="@dimen/spacing_normal">
|
||||
|
||||
<ScrollView
|
||||
android:id="@+id/parentView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:clipToPadding="false"
|
||||
android:fillViewport="true">
|
||||
<android.support.design.widget.TextInputLayout
|
||||
android:id="@+id/fileName"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:hintTextAppearance="@style/TextAppearance.AppCompat.Title">
|
||||
|
||||
<android.support.design.widget.TextInputEditText
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/file_name_hint"
|
||||
android:inputType="text"
|
||||
android:maxLines="1"/>
|
||||
|
||||
</android.support.design.widget.TextInputLayout>
|
||||
</android.support.v7.widget.CardView>
|
||||
|
||||
</LinearLayout>
|
||||
</android.support.design.widget.AppBarLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
app:layout_behavior="@string/scroll_behavior">
|
||||
|
||||
<com.fastaccess.ui.widgets.markdown.MarkdownEditText
|
||||
android:id="@+id/editText"
|
||||
<com.fastaccess.ui.widgets.markdown.MarkDownLayout
|
||||
android:id="@+id/markDownLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/transparent"
|
||||
android:gravity="top|start"
|
||||
android:hint="@string/type_here"
|
||||
android:inputType="textMultiLine|textCapSentences"
|
||||
android:minLines="5"
|
||||
android:padding="@dimen/spacing_xs_large"
|
||||
android:scrollbars="vertical"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||
tools:ignore="ScrollViewSize"/>
|
||||
android:layout_height="?actionBarSize"
|
||||
android:background="?card_background"
|
||||
android:elevation="2dp"
|
||||
android:orientation="horizontal"
|
||||
android:outlineProvider="background"/>
|
||||
|
||||
<ScrollView
|
||||
android:id="@+id/parentView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:clipToPadding="false"
|
||||
android:fillViewport="true"
|
||||
android:nestedScrollingEnabled="true">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.fastaccess.ui.widgets.markdown.MarkdownEditText
|
||||
android:id="@+id/editText"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/transparent"
|
||||
android:gravity="top|start"
|
||||
android:hint="@string/type_here"
|
||||
android:inputType="textMultiLine|textCapSentences"
|
||||
android:minLines="5"
|
||||
android:padding="@dimen/spacing_xs_large"
|
||||
android:scrollbars="vertical"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||
tools:ignore="ScrollViewSize"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</ScrollView>
|
||||
</LinearLayout>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="4dp"
|
||||
android:background="@drawable/toolbar_shadow_up"/>
|
||||
|
||||
<com.fastaccess.ui.widgets.markdown.MarkDownLayout
|
||||
android:id="@+id/markDownLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?actionBarSize"
|
||||
android:orientation="horizontal"/>
|
||||
</android.support.design.widget.CoordinatorLayout>
|
||||
</LinearLayout>
|
||||
@ -6,6 +6,7 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:focusableInTouchMode="true"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
@ -88,6 +89,7 @@
|
||||
android:textColor="@color/search_tab_highlighter"/>
|
||||
|
||||
<com.fastaccess.ui.widgets.FontTextView
|
||||
android:id="@+id/enterprisePrice"
|
||||
style="@style/Base.TextAppearance.AppCompat.Subhead"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
@ -154,6 +156,7 @@
|
||||
android:textColor="@color/search_tab_highlighter"/>
|
||||
|
||||
<com.fastaccess.ui.widgets.FontTextView
|
||||
android:id="@+id/proPrice"
|
||||
style="@style/Base.TextAppearance.AppCompat.Subhead"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
<body id="preview">
|
||||
<h2><a id="FastHub_changelog_0"></a>FastHub changelog
|
||||
</h2>
|
||||
<h3><a id="Version__420_Create_Edit__Delete_files_make_Commits_2"></a>Version 4.5.3
|
||||
<h3><a id="Version__420_Create_Edit__Delete_files_make_Commits_2"></a>Version 4.5.5
|
||||
</h3>
|
||||
<blockquote>
|
||||
<p>Please report the issues in FastHub repo instead, by opening the Drawer Menu and clicking on “Report an Issue”<strong>
|
||||
|
||||
@ -120,7 +120,7 @@
|
||||
</blockquote>
|
||||
]]>
|
||||
</string>
|
||||
<string name="purchase_all" translatable="false">Purchase All for ($ 7.99)</string>
|
||||
<string name="purchase_all" translatable="false" formatted="false">Purchase All for %price%</string>
|
||||
<string name="unlock" translatable="false">Unlock</string>
|
||||
<string name="unlock_everything" translatable="false">Unlock Everything</string>
|
||||
<string name="feeds" translatable="false">Feeds</string>
|
||||
@ -616,4 +616,5 @@
|
||||
<string name="disable_loading_image_title">Disable Loading Image</string>
|
||||
<string name="disable_loading_image_summary">Disable loading image while on data plan</string>
|
||||
<string name="report_issue_warning">This issue will be submitted to FastHub\'s repo in GitHub</string>
|
||||
<string name="block">Block</string>
|
||||
</resources>
|
||||
@ -2,7 +2,7 @@
|
||||
buildscript {
|
||||
ext {
|
||||
butterKnifeVersion = '8.5.1'
|
||||
state_version = '1.1.0'
|
||||
state_version = '1.1.6'
|
||||
lombokVersion = '1.16.18'
|
||||
supportVersion = "26.1.0"
|
||||
gms = "11.4.2"
|
||||
@ -15,6 +15,7 @@ buildscript {
|
||||
requery = '1.3.2'
|
||||
kotlin_version = '1.1.51'
|
||||
commonmark = '0.10.0'
|
||||
glideVersion = '3.7.0'
|
||||
}
|
||||
repositories {
|
||||
google()
|
||||
@ -22,7 +23,7 @@ buildscript {
|
||||
maven { url 'https://maven.fabric.io/public' }
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.1.0-alpha02'
|
||||
classpath 'com.android.tools.build:gradle:3.1.0-alpha03'
|
||||
classpath 'com.google.gms:google-services:3.0.0'
|
||||
classpath 'com.novoda:gradle-build-properties-plugin:0.3'
|
||||
classpath 'com.dicedmelon.gradle:jacoco-android:0.1.2'
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user