From 147b5a9a47d843314bf62a52ee6339d0a61c37fa Mon Sep 17 00:00:00 2001 From: Long Tran Date: Tue, 26 Apr 2016 15:45:17 +0200 Subject: [PATCH 01/18] updated butterknife to 8.0.0 --- app/build.gradle | 3 +- .../bktf/adapter/BackpackAdapter.java | 12 ++--- .../bktf/adapter/CalculatorAdapter.java | 18 +++---- .../bktf/adapter/FavoritesAdapter.java | 18 +++---- .../tlongdev/bktf/adapter/HistoryAdapter.java | 22 ++++---- .../bktf/adapter/LicensesAdapter.java | 8 +-- .../tlongdev/bktf/adapter/RecentsAdapter.java | 18 +++---- .../tlongdev/bktf/adapter/SearchAdapter.java | 20 +++---- .../bktf/adapter/SelectItemAdapter.java | 6 +-- .../tlongdev/bktf/adapter/UnusualAdapter.java | 12 ++--- .../bktf/ui/activity/ItemChooserActivity.java | 26 +++++----- .../bktf/ui/activity/ItemDetailActivity.java | 34 ++++++------ .../bktf/ui/activity/LicensesActivity.java | 6 +-- .../bktf/ui/activity/LoginActivity.java | 6 +-- .../bktf/ui/activity/MainActivity.java | 6 +-- .../ui/activity/PriceHistoryActivity.java | 12 ++--- .../bktf/ui/activity/SearchActivity.java | 8 +-- .../ui/activity/SearchFilterActivity.java | 12 ++--- .../bktf/ui/activity/SelectItemActivity.java | 6 +-- .../bktf/ui/activity/UnusualActivity.java | 10 ++-- .../bktf/ui/activity/UserActivity.java | 4 +- .../ui/activity/UserBackpackActivity.java | 6 +-- .../bktf/ui/activity/WebActivity.java | 8 +-- .../bktf/ui/fragment/CalculatorFragment.java | 27 +++++----- .../bktf/ui/fragment/ConverterFragment.java | 22 ++++---- .../bktf/ui/fragment/FavoritesFragment.java | 21 ++++---- .../bktf/ui/fragment/RecentsFragment.java | 35 +++++++------ .../bktf/ui/fragment/UnusualFragment.java | 21 ++++---- .../bktf/ui/fragment/UserFragment.java | 52 ++++++++++--------- 29 files changed, 240 insertions(+), 219 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8d39d23e..dd6bf4ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -60,6 +60,7 @@ dependencies { testCompile 'org.mockito:mockito-core:1.10.19' testCompile "org.robolectric:robolectric:3.1-SNAPSHOT" + apt 'com.jakewharton:butterknife-compiler:8.0.0' apt 'com.google.dagger:dagger-compiler:2.0.2' provided 'com.f2prateek.dart:dart-processor:2.0.0' provided 'org.glassfish:javax.annotation:10.0-b28' @@ -84,7 +85,7 @@ dependencies { compile 'com.google.dagger:dagger:2.0.2' compile 'com.github.PhilJay:MPAndroidChart:v2.2.3' compile 'com.github.bumptech.glide:glide:3.7.0' - compile 'com.jakewharton:butterknife:7.0.1' + compile 'com.jakewharton:butterknife:8.0.0' compile('com.squareup.okhttp3:okhttp:3.2.0') { exclude group: 'com.squareup.okio', module: 'okio' } diff --git a/app/src/main/java/com/tlongdev/bktf/adapter/BackpackAdapter.java b/app/src/main/java/com/tlongdev/bktf/adapter/BackpackAdapter.java index add14b6e..42e654bd 100644 --- a/app/src/main/java/com/tlongdev/bktf/adapter/BackpackAdapter.java +++ b/app/src/main/java/com/tlongdev/bktf/adapter/BackpackAdapter.java @@ -36,7 +36,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -230,11 +230,11 @@ public void setListener(OnItemClickedListener listener) { */ public static class ViewHolder extends RecyclerView.ViewHolder { - @Nullable @Bind(R.id.text_view_header) public TextView header = null; - @Nullable @Bind(R.id.icon) public ImageView icon = null; - @Nullable @Bind(R.id.effect) public ImageView effect = null; - @Nullable @Bind(R.id.paint) public ImageView paint = null; - @Nullable @Bind(R.id.quality) public ImageView quality; + @Nullable @BindView(R.id.text_view_header) public TextView header = null; + @Nullable @BindView(R.id.icon) public ImageView icon = null; + @Nullable @BindView(R.id.effect) public ImageView effect = null; + @Nullable @BindView(R.id.paint) public ImageView paint = null; + @Nullable @BindView(R.id.quality) public ImageView quality; public CardView root = null; /** diff --git a/app/src/main/java/com/tlongdev/bktf/adapter/CalculatorAdapter.java b/app/src/main/java/com/tlongdev/bktf/adapter/CalculatorAdapter.java index d71df4d2..dab09c9c 100644 --- a/app/src/main/java/com/tlongdev/bktf/adapter/CalculatorAdapter.java +++ b/app/src/main/java/com/tlongdev/bktf/adapter/CalculatorAdapter.java @@ -34,7 +34,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -182,14 +182,14 @@ public void clearDataSet() { */ public static class ViewHolder extends RecyclerView.ViewHolder { - @Bind(R.id.icon) ImageView icon; - @Bind(R.id.name) TextView name; - @Bind(R.id.price) TextView price; - @Bind(R.id.effect) ImageView effect; - @Bind(R.id.delete) ImageView delete; - @Bind(R.id.quality) ImageView quality; - @Bind(R.id.count) EditText count; - @Bind(R.id.icon_background) View background; + @BindView(R.id.icon) ImageView icon; + @BindView(R.id.name) TextView name; + @BindView(R.id.price) TextView price; + @BindView(R.id.effect) ImageView effect; + @BindView(R.id.delete) ImageView delete; + @BindView(R.id.quality) ImageView quality; + @BindView(R.id.count) EditText count; + @BindView(R.id.icon_background) View background; /** * Constructor diff --git a/app/src/main/java/com/tlongdev/bktf/adapter/FavoritesAdapter.java b/app/src/main/java/com/tlongdev/bktf/adapter/FavoritesAdapter.java index a4f58b4f..194046bc 100644 --- a/app/src/main/java/com/tlongdev/bktf/adapter/FavoritesAdapter.java +++ b/app/src/main/java/com/tlongdev/bktf/adapter/FavoritesAdapter.java @@ -34,7 +34,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; public class FavoritesAdapter extends RecyclerView.Adapter { @@ -139,16 +139,16 @@ public void removeItem(Item item) { public class ViewHolder extends RecyclerView.ViewHolder { final View root; - @Bind(R.id.more) View more; - @Bind(R.id.icon_background) View background; + @BindView(R.id.more) View more; + @BindView(R.id.icon_background) View background; - @Bind(R.id.icon) ImageView icon; - @Bind(R.id.effect) ImageView effect; - @Bind(R.id.quality) ImageView quality; + @BindView(R.id.icon) ImageView icon; + @BindView(R.id.effect) ImageView effect; + @BindView(R.id.quality) ImageView quality; - @Bind(R.id.name) TextView name; - @Bind(R.id.price) TextView price; - @Bind(R.id.difference) TextView difference; + @BindView(R.id.name) TextView name; + @BindView(R.id.price) TextView price; + @BindView(R.id.difference) TextView difference; /** * Constructor. diff --git a/app/src/main/java/com/tlongdev/bktf/adapter/HistoryAdapter.java b/app/src/main/java/com/tlongdev/bktf/adapter/HistoryAdapter.java index 95465714..00e848b4 100644 --- a/app/src/main/java/com/tlongdev/bktf/adapter/HistoryAdapter.java +++ b/app/src/main/java/com/tlongdev/bktf/adapter/HistoryAdapter.java @@ -54,7 +54,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -263,16 +263,16 @@ public static class ViewHolder extends RecyclerView.ViewHolder { /** * The views of the element */ - @Nullable @Bind(R.id.effect) ImageView effect; - @Nullable @Bind(R.id.icon) ImageView icon; - @Nullable @Bind(R.id.quality) ImageView quality; - @Nullable @Bind(R.id.name) TextView name; - @Nullable @Bind(R.id.history_chart) LineChart historyChart; - @Nullable @Bind(R.id.icon_card) CardView iconCard; - - @Nullable @Bind(R.id.price) TextView price; - @Nullable @Bind(R.id.date) TextView date; - @Nullable @Bind(R.id.separator) View separator; + @Nullable @BindView(R.id.effect) ImageView effect; + @Nullable @BindView(R.id.icon) ImageView icon; + @Nullable @BindView(R.id.quality) ImageView quality; + @Nullable @BindView(R.id.name) TextView name; + @Nullable @BindView(R.id.history_chart) LineChart historyChart; + @Nullable @BindView(R.id.icon_card) CardView iconCard; + + @Nullable @BindView(R.id.price) TextView price; + @Nullable @BindView(R.id.date) TextView date; + @Nullable @BindView(R.id.separator) View separator; /** * Constructor diff --git a/app/src/main/java/com/tlongdev/bktf/adapter/LicensesAdapter.java b/app/src/main/java/com/tlongdev/bktf/adapter/LicensesAdapter.java index e3bae343..097b672f 100644 --- a/app/src/main/java/com/tlongdev/bktf/adapter/LicensesAdapter.java +++ b/app/src/main/java/com/tlongdev/bktf/adapter/LicensesAdapter.java @@ -28,7 +28,7 @@ import java.util.List; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; public class LicensesAdapter extends RecyclerView.Adapter{ @@ -77,9 +77,9 @@ public void setListener(OnClickListener listener) { public class ViewHolder extends RecyclerView.ViewHolder { - @Bind(R.id.name) TextView name; - @Bind(R.id.link) TextView link; - @Bind(R.id.license) TextView license; + @BindView(R.id.name) TextView name; + @BindView(R.id.link) TextView link; + @BindView(R.id.license) TextView license; public ViewHolder(View view) { super(view); diff --git a/app/src/main/java/com/tlongdev/bktf/adapter/RecentsAdapter.java b/app/src/main/java/com/tlongdev/bktf/adapter/RecentsAdapter.java index e93d6065..0772f321 100644 --- a/app/src/main/java/com/tlongdev/bktf/adapter/RecentsAdapter.java +++ b/app/src/main/java/com/tlongdev/bktf/adapter/RecentsAdapter.java @@ -36,7 +36,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -160,14 +160,14 @@ public void setListener(OnMoreListener listener) { public static class ViewHolder extends RecyclerView.ViewHolder { final View root; - @Bind(R.id.more) View more; - @Bind(R.id.icon_background) View background; - @Bind(R.id.icon) ImageView icon; - @Bind(R.id.effect) ImageView effect; - @Bind(R.id.quality) ImageView quality; - @Bind(R.id.name) TextView name; - @Bind(R.id.price) TextView price; - @Bind(R.id.difference) TextView difference; + @BindView(R.id.more) View more; + @BindView(R.id.icon_background) View background; + @BindView(R.id.icon) ImageView icon; + @BindView(R.id.effect) ImageView effect; + @BindView(R.id.quality) ImageView quality; + @BindView(R.id.name) TextView name; + @BindView(R.id.price) TextView price; + @BindView(R.id.difference) TextView difference; public ViewHolder(View view) { super(view); diff --git a/app/src/main/java/com/tlongdev/bktf/adapter/SearchAdapter.java b/app/src/main/java/com/tlongdev/bktf/adapter/SearchAdapter.java index 2bf571fb..d8d99d63 100644 --- a/app/src/main/java/com/tlongdev/bktf/adapter/SearchAdapter.java +++ b/app/src/main/java/com/tlongdev/bktf/adapter/SearchAdapter.java @@ -38,7 +38,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -222,15 +222,15 @@ public void setListener(OnSearchClickListener listener) { class ViewHolder extends RecyclerView.ViewHolder { final View root; - @Bind(R.id.loading_layout) View loading; - @Bind(R.id.price_layout) View priceLayout; - @Bind(R.id.icon) ImageView icon; - @Bind(R.id.icon_background) View background; - @Bind(R.id.effect) ImageView effect; - @Bind(R.id.more) ImageView more; - @Bind(R.id.quality) ImageView quality; - @Bind(R.id.name) TextView name; - @Bind(R.id.price) TextView price; + @BindView(R.id.loading_layout) View loading; + @BindView(R.id.price_layout) View priceLayout; + @BindView(R.id.icon) ImageView icon; + @BindView(R.id.icon_background) View background; + @BindView(R.id.effect) ImageView effect; + @BindView(R.id.more) ImageView more; + @BindView(R.id.quality) ImageView quality; + @BindView(R.id.name) TextView name; + @BindView(R.id.price) TextView price; public ViewHolder(View view) { super(view); diff --git a/app/src/main/java/com/tlongdev/bktf/adapter/SelectItemAdapter.java b/app/src/main/java/com/tlongdev/bktf/adapter/SelectItemAdapter.java index a0394306..0268d6ca 100644 --- a/app/src/main/java/com/tlongdev/bktf/adapter/SelectItemAdapter.java +++ b/app/src/main/java/com/tlongdev/bktf/adapter/SelectItemAdapter.java @@ -33,7 +33,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; public class SelectItemAdapter extends RecyclerView.Adapter { @@ -99,8 +99,8 @@ public void setListener(OnItemSelectedListener listener) { public class ViewHolder extends RecyclerView.ViewHolder { - @Bind(R.id.icon) ImageView icon; - @Bind(R.id.name) TextView name; + @BindView(R.id.icon) ImageView icon; + @BindView(R.id.name) TextView name; final View root; public ViewHolder(View view) { diff --git a/app/src/main/java/com/tlongdev/bktf/adapter/UnusualAdapter.java b/app/src/main/java/com/tlongdev/bktf/adapter/UnusualAdapter.java index ca9238f6..e5587ccd 100644 --- a/app/src/main/java/com/tlongdev/bktf/adapter/UnusualAdapter.java +++ b/app/src/main/java/com/tlongdev/bktf/adapter/UnusualAdapter.java @@ -38,7 +38,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -180,11 +180,11 @@ class ViewHolder extends RecyclerView.ViewHolder { final View root; - @Bind(R.id.icon) ImageView icon; - @Bind(R.id.effect) ImageView effect; - @Bind(R.id.price) TextView price; - @Bind(R.id.name) TextView name; - @Bind(R.id.more) View more; + @BindView(R.id.icon) ImageView icon; + @BindView(R.id.effect) ImageView effect; + @BindView(R.id.price) TextView price; + @BindView(R.id.name) TextView name; + @BindView(R.id.more) View more; public ViewHolder(View view) { super(view); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemChooserActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemChooserActivity.java index f469b1ef..9a07bfb4 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemChooserActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemChooserActivity.java @@ -44,7 +44,7 @@ import java.util.List; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; @@ -58,18 +58,18 @@ public class ItemChooserActivity extends BptfActivity implements ItemChooserView public static final String EXTRA_ITEM = "item"; public static final String EXTRA_IS_FROM_CALCULATOR = "calculator"; - @Bind(R.id.quality) Spinner qualitySpinner; - @Bind(R.id.effect) Spinner effectSpinner; - @Bind(R.id.weapon_wear) Spinner wearSpinner; - @Bind(R.id.title_effect) TextView titleEffect; - @Bind(R.id.title_wear) TextView titleWear; - @Bind(R.id.icon) ImageView icon; - @Bind(R.id.item_text) TextView itemText; - @Bind(R.id.item_name) TextView itemName; - @Bind(R.id.tradable) CheckBox tradable; - @Bind(R.id.craftable) CheckBox craftable; - @Bind(R.id.australium) CheckBox australium; - @Bind(R.id.fab) FloatingActionButton fab; + @BindView(R.id.quality) Spinner qualitySpinner; + @BindView(R.id.effect) Spinner effectSpinner; + @BindView(R.id.weapon_wear) Spinner wearSpinner; + @BindView(R.id.title_effect) TextView titleEffect; + @BindView(R.id.title_wear) TextView titleWear; + @BindView(R.id.icon) ImageView icon; + @BindView(R.id.item_text) TextView itemText; + @BindView(R.id.item_name) TextView itemName; + @BindView(R.id.tradable) CheckBox tradable; + @BindView(R.id.craftable) CheckBox craftable; + @BindView(R.id.australium) CheckBox australium; + @BindView(R.id.fab) FloatingActionButton fab; @SuppressWarnings("NullableProblems") @Nullable diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemDetailActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemDetailActivity.java index 5a3ddb87..a35713a8 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemDetailActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemDetailActivity.java @@ -36,7 +36,7 @@ import com.tlongdev.bktf.ui.view.activity.ItemDetailView; import com.tlongdev.bktf.util.Utility; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -58,24 +58,24 @@ public class ItemDetailActivity extends BptfActivity implements ItemDetailView { @InjectExtra(EXTRA_ITEM_TYPE) String mItemType; //References to all the text views in the view - @Bind(R.id.text_view_name) TextView name; - @Bind(R.id.text_view_level) TextView level; - @Bind(R.id.text_view_effect_name) TextView effect; - @Bind(R.id.text_view_custom_name) TextView customName; - @Bind(R.id.text_view_custom_desc) TextView customDesc; - @Bind(R.id.text_view_crafted) TextView crafterName; - @Bind(R.id.text_view_gifted) TextView gifterName; - @Bind(R.id.text_view_origin) TextView origin; - @Bind(R.id.text_view_paint) TextView paint; - @Bind(R.id.text_view_price) TextView priceView; - @Bind(R.id.image_layout) FrameLayout layout; + @BindView(R.id.text_view_name) TextView name; + @BindView(R.id.text_view_level) TextView level; + @BindView(R.id.text_view_effect_name) TextView effect; + @BindView(R.id.text_view_custom_name) TextView customName; + @BindView(R.id.text_view_custom_desc) TextView customDesc; + @BindView(R.id.text_view_crafted) TextView crafterName; + @BindView(R.id.text_view_gifted) TextView gifterName; + @BindView(R.id.text_view_origin) TextView origin; + @BindView(R.id.text_view_paint) TextView paint; + @BindView(R.id.text_view_price) TextView priceView; + @BindView(R.id.image_layout) FrameLayout layout; //References to the image view - @Bind(R.id.icon) ImageView icon; - @Bind(R.id.effect) ImageView effectView; - @Bind(R.id.paint) ImageView paintView; - @Bind(R.id.quality) ImageView quality; - @Bind(R.id.card_view) CardView cardView; + @BindView(R.id.icon) ImageView icon; + @BindView(R.id.effect) ImageView effectView; + @BindView(R.id.paint) ImageView paintView; + @BindView(R.id.quality) ImageView quality; + @BindView(R.id.card_view) CardView cardView; private ItemDetailPresenter mPresenter; diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/LicensesActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/LicensesActivity.java index 54d4661f..af2b468c 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/LicensesActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/LicensesActivity.java @@ -32,13 +32,13 @@ import java.util.List; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; public class LicensesActivity extends BptfActivity implements LicensesView, LicensesAdapter.OnClickListener { - @Bind(R.id.recycler_view) RecyclerView mRecyclerView; - @Bind(R.id.toolbar) Toolbar mToolbar; + @BindView(R.id.recycler_view) RecyclerView mRecyclerView; + @BindView(R.id.toolbar) Toolbar mToolbar; private LicensesPresenter mPresenter; diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/LoginActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/LoginActivity.java index c1d13d99..a9f9b29a 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/LoginActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/LoginActivity.java @@ -31,14 +31,14 @@ import com.tlongdev.bktf.presenter.activity.LoginPresenter; import com.tlongdev.bktf.ui.view.activity.LoginView; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class LoginActivity extends BptfActivity implements LoginView { - @Bind(R.id.steam_id) EditText steamIdInput; - @Bind(R.id.toolbar) Toolbar mToolbar; + @BindView(R.id.steam_id) EditText steamIdInput; + @BindView(R.id.toolbar) Toolbar mToolbar; private ProgressDialog loadingDialog; private LoginPresenter mPresenter; diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/MainActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/MainActivity.java index 4df727ce..38605b0d 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/MainActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/MainActivity.java @@ -54,7 +54,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -84,8 +84,8 @@ public class MainActivity extends AppCompatActivity { @Inject SharedPreferences mPrefs; @Inject ProfileManager mProfileManager; - @Bind(R.id.drawer_layout) DrawerLayout mDrawerLayout; - @Bind(R.id.navigation_view) NavigationView mNavigationView; + @BindView(R.id.drawer_layout) DrawerLayout mDrawerLayout; + @BindView(R.id.navigation_view) NavigationView mNavigationView; /** * Helper component that ties the action bar to the navigation drawer. diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/PriceHistoryActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/PriceHistoryActivity.java index 383de534..85d830a1 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/PriceHistoryActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/PriceHistoryActivity.java @@ -44,7 +44,7 @@ import java.util.List; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; public class PriceHistoryActivity extends BptfActivity implements PriceHistoryView { @@ -55,11 +55,11 @@ public class PriceHistoryActivity extends BptfActivity implements PriceHistoryVi @InjectExtra(EXTRA_ITEM) Item mItem; - @Bind(R.id.recycler_view) RecyclerView mRecyclerView; - @Bind(R.id.progress_bar) ProgressBar progressBar; - @Bind(R.id.fail_text) TextView failText; - @Bind(R.id.toolbar) Toolbar mToolbar; - @Bind(R.id.ad_view) AdView mAdView; + @BindView(R.id.recycler_view) RecyclerView mRecyclerView; + @BindView(R.id.progress_bar) ProgressBar progressBar; + @BindView(R.id.fail_text) TextView failText; + @BindView(R.id.toolbar) Toolbar mToolbar; + @BindView(R.id.ad_view) AdView mAdView; private PriceHistoryPresenter mPresenter; diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/SearchActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/SearchActivity.java index 11e586ca..52df0a76 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/SearchActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/SearchActivity.java @@ -43,15 +43,15 @@ import com.tlongdev.bktf.presenter.activity.SearchPresenter; import com.tlongdev.bktf.util.Utility; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class SearchActivity extends BptfActivity implements com.tlongdev.bktf.ui.view.activity.SearchView, SearchAdapter.OnSearchClickListener { - @Bind(R.id.recycler_view) RecyclerView mRecyclerView; - @Bind(R.id.toolbar) Toolbar mToolbar; - @Bind(R.id.ad_view) AdView mAdView; + @BindView(R.id.recycler_view) RecyclerView mRecyclerView; + @BindView(R.id.toolbar) Toolbar mToolbar; + @BindView(R.id.ad_view) AdView mAdView; //The adapter of the recyclerview private SearchAdapter mAdapter; diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/SearchFilterActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/SearchFilterActivity.java index 7ad7ba46..5687dd8a 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/SearchFilterActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/SearchFilterActivity.java @@ -35,7 +35,7 @@ import java.util.Arrays; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; @@ -63,11 +63,11 @@ public class SearchFilterActivity extends BptfActivity { @Nullable @InjectExtra(EXTRA_AUSTRALIUM) boolean mAustralium = true; - @Bind(R.id.quality) Spinner qualitySpinner; - @Bind(R.id.tradable) CheckBox tradable; - @Bind(R.id.craftable) CheckBox craftable; - @Bind(R.id.australium) CheckBox australium; - @Bind(R.id.enable) Switch enableSwitch; + @BindView(R.id.quality) Spinner qualitySpinner; + @BindView(R.id.tradable) CheckBox tradable; + @BindView(R.id.craftable) CheckBox craftable; + @BindView(R.id.australium) CheckBox australium; + @BindView(R.id.enable) Switch enableSwitch; private QualityAdapter qualityAdapter; diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/SelectItemActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/SelectItemActivity.java index 2e6f6226..0b664f37 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/SelectItemActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/SelectItemActivity.java @@ -30,7 +30,7 @@ import com.tlongdev.bktf.presenter.activity.SelectItemPresenter; import com.tlongdev.bktf.ui.view.activity.SelectItemView; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; public class SelectItemActivity extends BptfActivity implements SelectItemView, TextWatcher, @@ -39,8 +39,8 @@ public class SelectItemActivity extends BptfActivity implements SelectItemView, public static final String EXTRA_DEFINDEX = "defindex"; public static final String EXTRA_NAME = "name"; - @Bind(R.id.recycler_view) RecyclerView mRecyclerView; - @Bind(R.id.item_name) EditText inputName; + @BindView(R.id.recycler_view) RecyclerView mRecyclerView; + @BindView(R.id.item_name) EditText inputName; private SelectItemPresenter mPresenter; private SelectItemAdapter mAdapter; diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/UnusualActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/UnusualActivity.java index 47f14198..c11fc52d 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/UnusualActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/UnusualActivity.java @@ -47,7 +47,7 @@ import java.util.List; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -67,10 +67,10 @@ public class UnusualActivity extends BptfActivity implements UnusualView, TextWa @InjectExtra(EXTRA_PRICE_INDEX) int mIndex = -1; @InjectExtra(EXTRA_NAME) String mName; - @Bind(R.id.search) EditText mSearchInput; - @Bind(R.id.toolbar) Toolbar mToolbar; - @Bind(R.id.recycler_view) RecyclerView mRecyclerView; - @Bind(R.id.ad_view) AdView mAdView; + @BindView(R.id.search) EditText mSearchInput; + @BindView(R.id.toolbar) Toolbar mToolbar; + @BindView(R.id.recycler_view) RecyclerView mRecyclerView; + @BindView(R.id.ad_view) AdView mAdView; private UnusualAdapter mAdapter; private UnusualPresenter mPresenter; diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/UserActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/UserActivity.java index 042e3dc3..d5b20f7d 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/UserActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/UserActivity.java @@ -33,7 +33,7 @@ import com.tlongdev.bktf.ui.fragment.UserFragment; import com.tlongdev.bktf.ui.view.activity.UserView; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -51,7 +51,7 @@ public class UserActivity extends BptfActivity implements UserView{ public static final String STEAM_ID_KEY = "steamid"; //Progress bar that indicates downloading user data. - @Bind(R.id.progress_bar) ProgressBar progressBar; + @BindView(R.id.progress_bar) ProgressBar progressBar; @InjectExtra(STEAM_ID_KEY) String steamId; diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/UserBackpackActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/UserBackpackActivity.java index a843329b..d8b76dbf 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/UserBackpackActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/UserBackpackActivity.java @@ -40,7 +40,7 @@ import java.util.List; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -52,8 +52,8 @@ public class UserBackpackActivity extends BptfActivity implements UserBackpackVi public static final String EXTRA_NAME = "name"; public static final String EXTRA_GUEST = "guest"; - @Bind(R.id.recycler_view) RecyclerView mRecyclerView; - @Bind(R.id.ad_view) AdView mAdView; + @BindView(R.id.recycler_view) RecyclerView mRecyclerView; + @BindView(R.id.ad_view) AdView mAdView; //Adapters used for the listview private BackpackAdapter mAdapter; diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/WebActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/WebActivity.java index 98d4b8cc..78154602 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/WebActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/WebActivity.java @@ -31,16 +31,16 @@ import com.f2prateek.dart.InjectExtra; import com.tlongdev.bktf.R; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; public class WebActivity extends BptfActivity { public static final String EXTRA_URL = "url"; - @Bind(R.id.web_view) WebView webView; - @Bind(R.id.toolbar) Toolbar mToolbar; - @Bind(R.id.progress_bar) ProgressBar mProgressBar; + @BindView(R.id.web_view) WebView webView; + @BindView(R.id.toolbar) Toolbar mToolbar; + @BindView(R.id.progress_bar) ProgressBar mProgressBar; @InjectExtra(EXTRA_URL) String mUrl; diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/CalculatorFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/CalculatorFragment.java index 6183a58f..20190e7e 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/CalculatorFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/CalculatorFragment.java @@ -51,9 +51,10 @@ import java.util.List; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; +import butterknife.Unbinder; /** * Calculator fragment. Let's the user create a list of items and it will calculate the total value @@ -61,17 +62,18 @@ */ public class CalculatorFragment extends BptfFragment implements CalculatorView, MainActivity.OnDrawerOpenedListener{ - @Bind(R.id.text_view_price_metal) TextView priceMetal; - @Bind(R.id.text_view_price_keys) TextView priceKeys; - @Bind(R.id.text_view_price_buds) TextView priceBuds; - @Bind(R.id.text_view_price_usd) TextView priceUsd; - @Bind(R.id.app_bar_layout) AppBarLayout mAppBarLayout; - @Bind(R.id.coordinator_layout) CoordinatorLayout mCoordinatorLayout; - @Bind(R.id.recycler_view) RecyclerView mRecyclerView; - @Bind(R.id.ad_view) AdView mAdView; + @BindView(R.id.text_view_price_metal) TextView priceMetal; + @BindView(R.id.text_view_price_keys) TextView priceKeys; + @BindView(R.id.text_view_price_buds) TextView priceBuds; + @BindView(R.id.text_view_price_usd) TextView priceUsd; + @BindView(R.id.app_bar_layout) AppBarLayout mAppBarLayout; + @BindView(R.id.coordinator_layout) CoordinatorLayout mCoordinatorLayout; + @BindView(R.id.recycler_view) RecyclerView mRecyclerView; + @BindView(R.id.ad_view) AdView mAdView; private CalculatorAdapter mAdapter; private CalculatorPresenter mPresenter; + private Unbinder mUnbinder; public CalculatorFragment() { // Required empty public constructor @@ -91,7 +93,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, mPresenter.attachView(this); View rootView = inflater.inflate(R.layout.fragment_calculator, container, false); - ButterKnife.bind(this, rootView); + mUnbinder = ButterKnife.bind(this, rootView); //Set the toolbar to the main activity's action bar ((AppCompatActivity) getActivity()).setSupportActionBar((Toolbar) rootView.findViewById(R.id.toolbar)); @@ -137,10 +139,11 @@ public void onResume() { } @Override - public void onDestroy() { - super.onDestroy(); + public void onDestroyView() { + super.onDestroyView(); mPresenter.detachView(); mAdManager.removeAdView(mAdView); + mUnbinder.unbind(); } @OnClick(R.id.fab) diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/ConverterFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/ConverterFragment.java index 8cd390d9..a847731d 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/ConverterFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/ConverterFragment.java @@ -43,11 +43,12 @@ import com.tlongdev.bktf.ui.activity.SearchActivity; import com.tlongdev.bktf.util.Utility; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import butterknife.OnFocusChange; import butterknife.OnTouch; +import butterknife.Unbinder; /** * Converter fragment. Let's the user quickly convert between currencies. @@ -63,17 +64,19 @@ public class ConverterFragment extends BptfFragment implements View.OnClickListe /** * Inputs */ - @Bind(R.id.edit_text_earbuds) EditText inputEarbuds; - @Bind(R.id.edit_text_keys) EditText inputKeys; - @Bind(R.id.edit_text_metal) EditText inputMetal; - @Bind(R.id.edit_text_usd) EditText inputUsd; - @Bind(R.id.ad_view) AdView mAdView; + @BindView(R.id.edit_text_earbuds) EditText inputEarbuds; + @BindView(R.id.edit_text_keys) EditText inputKeys; + @BindView(R.id.edit_text_metal) EditText inputMetal; + @BindView(R.id.edit_text_usd) EditText inputUsd; + @BindView(R.id.ad_view) AdView mAdView; /** * the view that is currently in focus */ private EditText focus; + private Unbinder mUnbinder; + /** * Constructor. */ @@ -94,7 +97,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, // Inflate the layout for this fragment View rootView = inflater.inflate(R.layout.fragment_converter, container, false); - ButterKnife.bind(this, rootView); + mUnbinder = ButterKnife.bind(this, rootView); //Set the toolbar to the main activity's action bar ((AppCompatActivity) getActivity()).setSupportActionBar((Toolbar) rootView.findViewById(R.id.toolbar)); @@ -252,9 +255,10 @@ public void onResume() { } @Override - public void onDestroy() { - super.onDestroy(); + public void onDestroyView() { + super.onDestroyView(); mAdManager.removeAdView(mAdView); + mUnbinder.unbind(); } @Override diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/FavoritesFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/FavoritesFragment.java index 2676034f..ef897ae0 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/FavoritesFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/FavoritesFragment.java @@ -52,9 +52,10 @@ import java.util.List; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; +import butterknife.Unbinder; /** * A simple {@link Fragment} subclass. @@ -62,13 +63,14 @@ public class FavoritesFragment extends BptfFragment implements FavoritesView, MainActivity.OnDrawerOpenedListener, FavoritesAdapter.OnMoreListener { - @Bind(R.id.app_bar_layout) AppBarLayout mAppBarLayout; - @Bind(R.id.coordinator_layout) CoordinatorLayout mCoordinatorLayout; - @Bind(R.id.recycler_view) RecyclerView mRecyclerView; - @Bind(R.id.ad_view) AdView mAdView; + @BindView(R.id.app_bar_layout) AppBarLayout mAppBarLayout; + @BindView(R.id.coordinator_layout) CoordinatorLayout mCoordinatorLayout; + @BindView(R.id.recycler_view) RecyclerView mRecyclerView; + @BindView(R.id.ad_view) AdView mAdView; private FavoritesPresenter mPresenter; private FavoritesAdapter mAdapter; + private Unbinder mUnbinder; /** * Constructor @@ -97,7 +99,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, // Inflate the layout for this fragment View rootView = inflater.inflate(R.layout.fragment_favorites, container, false); - ButterKnife.bind(this, rootView); + mUnbinder = ButterKnife.bind(this, rootView); //Set the toolbar to the main activity's action bar ((AppCompatActivity) getActivity()).setSupportActionBar((Toolbar) rootView.findViewById(R.id.toolbar)); @@ -138,10 +140,11 @@ public void onResume() { } @Override - public void onDestroy() { - super.onDestroy(); - mPresenter.detachView(); + public void onDestroyView() { + super.onDestroyView(); mAdManager.removeAdView(mAdView); + mPresenter.detachView(); + mUnbinder.unbind(); } @Override diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/RecentsFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/RecentsFragment.java index 72fa6343..142012b7 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/RecentsFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/RecentsFragment.java @@ -62,8 +62,9 @@ import com.tlongdev.bktf.ui.view.fragment.RecentsView; import com.tlongdev.bktf.util.Utility; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; +import butterknife.Unbinder; /** * recents fragment. Shows a list of all the prices orderd by the time of the price update. @@ -71,18 +72,18 @@ public class RecentsFragment extends BptfFragment implements RecentsView, SwipeRefreshLayout.OnRefreshListener, MainActivity.OnDrawerOpenedListener, RecentsAdapter.OnMoreListener { - @Bind(R.id.progress_bar) ProgressBar progressBar; - @Bind(R.id.swipe_refresh) SwipeRefreshLayout mSwipeRefreshLayout; - @Bind(R.id.recycler_view) RecyclerView mRecyclerView; - @Bind(R.id.app_bar_layout) AppBarLayout mAppBarLayout; - @Bind(R.id.coordinator_layout) CoordinatorLayout mCoordinatorLayout; - @Bind(R.id.text_view_metal_price) TextView mMetalPrice; - @Bind(R.id.text_view_key_price) TextView mKeyPrice; - @Bind(R.id.text_view_buds_price) TextView mBudsPrice; - @Bind(R.id.image_view_metal_price) View metalPriceImage; - @Bind(R.id.image_view_key_price) View keyPriceImage; - @Bind(R.id.image_view_buds_price) View budsPriceImage; - @Bind(R.id.ad_view) AdView mAdView; + @BindView(R.id.progress_bar) ProgressBar progressBar; + @BindView(R.id.swipe_refresh) SwipeRefreshLayout mSwipeRefreshLayout; + @BindView(R.id.recycler_view) RecyclerView mRecyclerView; + @BindView(R.id.app_bar_layout) AppBarLayout mAppBarLayout; + @BindView(R.id.coordinator_layout) CoordinatorLayout mCoordinatorLayout; + @BindView(R.id.text_view_metal_price) TextView mMetalPrice; + @BindView(R.id.text_view_key_price) TextView mKeyPrice; + @BindView(R.id.text_view_buds_price) TextView mBudsPrice; + @BindView(R.id.image_view_metal_price) View metalPriceImage; + @BindView(R.id.image_view_key_price) View keyPriceImage; + @BindView(R.id.image_view_buds_price) View budsPriceImage; + @BindView(R.id.ad_view) AdView mAdView; /** * Adapter of the recycler view @@ -94,6 +95,7 @@ public class RecentsFragment extends BptfFragment implements RecentsView, private Context mContext; private RecentsPresenter mPresenter; + private Unbinder mUnbinder; /** * Constructor @@ -127,7 +129,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, mPresenter.attachView(this); View rootView = inflater.inflate(R.layout.fragment_recents, container, false); - ButterKnife.bind(this, rootView); + mUnbinder = ButterKnife.bind(this, rootView); //Set the toolbar to the main activity's action bar ((AppCompatActivity) mContext).setSupportActionBar((Toolbar) rootView.findViewById(R.id.toolbar)); @@ -173,10 +175,11 @@ public void onResume() { } @Override - public void onDestroy() { - super.onDestroy(); + public void onDestroyView() { + super.onDestroyView(); mPresenter.detachView(); mAdManager.removeAdView(mAdView); + mUnbinder.unbind(); } @Override diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UnusualFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UnusualFragment.java index 54c1ad5b..b4247069 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UnusualFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UnusualFragment.java @@ -53,8 +53,9 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; +import butterknife.Unbinder; /** * The unusual fragment, that shows a list of unusual item categories. Either categorized by @@ -65,11 +66,11 @@ public class UnusualFragment extends BptfFragment implements UnusualView, @Inject Context mContext; - @Bind(R.id.app_bar_layout) AppBarLayout mAppBarLayout; - @Bind(R.id.coordinator_layout) CoordinatorLayout mCoordinatorLayout; - @Bind(R.id.search) EditText mSearchInput; - @Bind(R.id.recycler_view) RecyclerView mRecyclerView; - @Bind(R.id.ad_view) AdView mAdView; + @BindView(R.id.app_bar_layout) AppBarLayout mAppBarLayout; + @BindView(R.id.coordinator_layout) CoordinatorLayout mCoordinatorLayout; + @BindView(R.id.search) EditText mSearchInput; + @BindView(R.id.recycler_view) RecyclerView mRecyclerView; + @BindView(R.id.ad_view) AdView mAdView; /** * the current sort type @@ -93,6 +94,7 @@ public class UnusualFragment extends BptfFragment implements UnusualView, private MenuItem effectMenuItem; private UnusualPresenter mPresenter; + private Unbinder mUnbinder; /** * Constructor. @@ -113,7 +115,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_unusual, container, false); - ButterKnife.bind(this, rootView); + mUnbinder = ButterKnife.bind(this, rootView); mApplication.getFragmentComponent().inject(this); mPresenter = new UnusualPresenter(mApplication); @@ -152,10 +154,11 @@ public void onResume() { } @Override - public void onDestroy() { - super.onDestroy(); + public void onDestroyView() { + super.onDestroyView(); mPresenter.detachView(); mAdManager.removeAdView(mAdView); + mUnbinder.unbind(); } @Override diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java index 695cf086..994c7c35 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java @@ -60,9 +60,10 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; +import butterknife.Unbinder; /** * Fragment for displaying the user profile. @@ -75,26 +76,26 @@ public class UserFragment extends BptfFragment implements UserView, View.OnClick @Inject ProfileManager mProfileManager; @Inject Context mContext; - @Bind(R.id.text_view_player_reputation) TextView playerReputation; - @Bind(R.id.trust_positive) TextView trustPositive; - @Bind(R.id.trust_negative) TextView trustNegative; - @Bind(R.id.steamrep_status) ImageView steamRepStatus; - @Bind(R.id.vac_status) ImageView vacStatus; - @Bind(R.id.trade_status) ImageView tradeStatus; - @Bind(R.id.community_status) ImageView communityStatus; - @Bind(R.id.text_view_bp_refined) TextView backpackValueRefined; - @Bind(R.id.text_view_bp_raw_metal) TextView backpackRawMetal; - @Bind(R.id.text_view_bp_raw_keys) TextView backpackRawKeys; - @Bind(R.id.text_view_bp_usd) TextView backpackValueUsd; - @Bind(R.id.text_view_bp_slots) TextView backpackSlots; - @Bind(R.id.text_view_user_since) TextView userSinceText; - @Bind(R.id.text_view_user_last_online) TextView lastOnlineText; - @Bind(R.id.avatar) ImageView avatar; - @Bind(R.id.swipe_refresh) SwipeRefreshLayout mSwipeRefreshLayout; - @Bind(R.id.app_bar_layout) AppBarLayout mAppBarLayout; - @Bind(R.id.coordinator_layout) CoordinatorLayout mCoordinatorLayout; - @Bind(R.id.collapsing_toolbar) CollapsingToolbarLayout mCollapsingToolbarLayout; - @Bind(R.id.ad_view) AdView mAdView; + @BindView(R.id.text_view_player_reputation) TextView playerReputation; + @BindView(R.id.trust_positive) TextView trustPositive; + @BindView(R.id.trust_negative) TextView trustNegative; + @BindView(R.id.steamrep_status) ImageView steamRepStatus; + @BindView(R.id.vac_status) ImageView vacStatus; + @BindView(R.id.trade_status) ImageView tradeStatus; + @BindView(R.id.community_status) ImageView communityStatus; + @BindView(R.id.text_view_bp_refined) TextView backpackValueRefined; + @BindView(R.id.text_view_bp_raw_metal) TextView backpackRawMetal; + @BindView(R.id.text_view_bp_raw_keys) TextView backpackRawKeys; + @BindView(R.id.text_view_bp_usd) TextView backpackValueUsd; + @BindView(R.id.text_view_bp_slots) TextView backpackSlots; + @BindView(R.id.text_view_user_since) TextView userSinceText; + @BindView(R.id.text_view_user_last_online) TextView lastOnlineText; + @BindView(R.id.avatar) ImageView avatar; + @BindView(R.id.swipe_refresh) SwipeRefreshLayout mSwipeRefreshLayout; + @BindView(R.id.app_bar_layout) AppBarLayout mAppBarLayout; + @BindView(R.id.coordinator_layout) CoordinatorLayout mCoordinatorLayout; + @BindView(R.id.collapsing_toolbar) CollapsingToolbarLayout mCollapsingToolbarLayout; + @BindView(R.id.ad_view) AdView mAdView; //Stores whether the backpack is private or not private boolean privateBackpack = false; @@ -104,6 +105,8 @@ public class UserFragment extends BptfFragment implements UserView, View.OnClick private User mUser; private boolean searchedUser; + private Unbinder mUnbinder; + /** * Constructor */ @@ -148,7 +151,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, mPresenter.setSearchedUser(searchedUser); View rootView = inflater.inflate(R.layout.fragment_user, container, false); - ButterKnife.bind(this, rootView); + mUnbinder = ButterKnife.bind(this, rootView); //Set the toolbar to the main activity's action bar ((AppCompatActivity) getActivity()).setSupportActionBar((Toolbar) rootView.findViewById(R.id.toolbar)); @@ -183,10 +186,11 @@ public void onResume() { } @Override - public void onDestroy() { - super.onDestroy(); + public void onDestroyView() { + super.onDestroyView(); mPresenter.detachView(); mAdManager.removeAdView(mAdView); + mUnbinder.unbind(); } @Override From 27d2cdf731cb548d4701760e13183291b5981649 Mon Sep 17 00:00:00 2001 From: Long Tran Date: Wed, 27 Apr 2016 09:07:43 +0200 Subject: [PATCH 02/18] updated gradle tools --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index f3d6cf1a..0ea5f277 100644 --- a/build.gradle +++ b/build.gradle @@ -4,8 +4,8 @@ buildscript { maven { url 'https://maven.fabric.io/public' } } dependencies { - classpath 'com.android.tools.build:gradle:2.0.0' - classpath 'com.google.gms:google-services:2.0.0' + classpath 'com.android.tools.build:gradle:2.1.0' + classpath 'com.google.gms:google-services:2.1.0' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' classpath 'io.fabric.tools:gradle:1.21.5' } From a0f759ac34f6db2698d8fa97d9be94caa536daa8 Mon Sep 17 00:00:00 2001 From: Long Tran Date: Wed, 27 Apr 2016 09:11:02 +0200 Subject: [PATCH 03/18] don't obfuscate --- app/proguard_general.pro | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/proguard_general.pro b/app/proguard_general.pro index e6a55578..85c6e7df 100644 --- a/app/proguard_general.pro +++ b/app/proguard_general.pro @@ -1,3 +1,5 @@ +-dontobfuscate + -dontwarn android.support.** -keep class android.support.** { *; } -keep interface android.support.** { *; } From f284034438a8f6f065fd000db4940b7901c4f42b Mon Sep 17 00:00:00 2001 From: Long Tran Date: Wed, 27 Apr 2016 10:09:09 +0200 Subject: [PATCH 04/18] inject presenters --- app/build.gradle | 1 + .../bktf/component/ActivityComponent.java | 33 ++++- .../bktf/component/FragmentComponent.java | 15 ++- .../tlongdev/bktf/module/PresenterModule.java | 121 ++++++++++++++++++ .../bktf/ui/activity/ItemChooserActivity.java | 7 +- .../bktf/ui/activity/ItemDetailActivity.java | 11 +- .../bktf/ui/activity/LicensesActivity.java | 8 +- .../bktf/ui/activity/LoginActivity.java | 7 +- .../ui/activity/PriceHistoryActivity.java | 8 +- .../bktf/ui/activity/SearchActivity.java | 8 +- .../bktf/ui/activity/SelectItemActivity.java | 7 +- .../bktf/ui/activity/UnusualActivity.java | 7 +- .../bktf/ui/activity/UserActivity.java | 8 +- .../ui/activity/UserBackpackActivity.java | 8 +- .../bktf/ui/fragment/CalculatorFragment.java | 13 +- .../bktf/ui/fragment/ConverterFragment.java | 1 - .../bktf/ui/fragment/FavoritesFragment.java | 13 +- .../bktf/ui/fragment/RecentsFragment.java | 13 +- .../bktf/ui/fragment/UnusualFragment.java | 3 +- .../bktf/ui/fragment/UserFragment.java | 9 +- 20 files changed, 262 insertions(+), 39 deletions(-) create mode 100644 app/src/main/java/com/tlongdev/bktf/module/PresenterModule.java diff --git a/app/build.gradle b/app/build.gradle index dd6bf4ac..11e987d5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -91,6 +91,7 @@ dependencies { } compile 'com.squareup.retrofit2:retrofit:2.0.2' compile 'com.squareup.retrofit2:converter-gson:2.0.2' + compile 'com.google.android.gms:play-services-appindexing:8.4.0' } apply plugin: 'com.google.gms.google-services' \ No newline at end of file diff --git a/app/src/main/java/com/tlongdev/bktf/component/ActivityComponent.java b/app/src/main/java/com/tlongdev/bktf/component/ActivityComponent.java index 0432d9f1..136aaa01 100644 --- a/app/src/main/java/com/tlongdev/bktf/component/ActivityComponent.java +++ b/app/src/main/java/com/tlongdev/bktf/component/ActivityComponent.java @@ -17,9 +17,20 @@ package com.tlongdev.bktf.component; import com.tlongdev.bktf.module.BptfAppModule; +import com.tlongdev.bktf.module.PresenterModule; import com.tlongdev.bktf.ui.activity.AppCompatPreferenceActivity; import com.tlongdev.bktf.ui.activity.BptfActivity; +import com.tlongdev.bktf.ui.activity.ItemChooserActivity; +import com.tlongdev.bktf.ui.activity.ItemDetailActivity; +import com.tlongdev.bktf.ui.activity.LicensesActivity; +import com.tlongdev.bktf.ui.activity.LoginActivity; import com.tlongdev.bktf.ui.activity.MainActivity; +import com.tlongdev.bktf.ui.activity.PriceHistoryActivity; +import com.tlongdev.bktf.ui.activity.SearchActivity; +import com.tlongdev.bktf.ui.activity.SelectItemActivity; +import com.tlongdev.bktf.ui.activity.UnusualActivity; +import com.tlongdev.bktf.ui.activity.UserActivity; +import com.tlongdev.bktf.ui.activity.UserBackpackActivity; import javax.inject.Singleton; @@ -30,7 +41,7 @@ * @since 2016. 03. 10. */ @Singleton -@Component(modules = BptfAppModule.class) +@Component(modules = {PresenterModule.class, BptfAppModule.class}) public interface ActivityComponent { void inject(BptfActivity bptfActivity); @@ -38,4 +49,24 @@ public interface ActivityComponent { void inject(AppCompatPreferenceActivity appCompatPreferenceActivity); void inject(MainActivity mainActivity); + + void inject(ItemChooserActivity itemChooserActivity); + + void inject(ItemDetailActivity itemDetailActivity); + + void inject(LicensesActivity licensesActivity); + + void inject(LoginActivity loginActivity); + + void inject(PriceHistoryActivity priceHistoryActivity); + + void inject(SearchActivity searchActivity); + + void inject(SelectItemActivity selectItemActivity); + + void inject(UnusualActivity unusualActivity); + + void inject(UserActivity userActivity); + + void inject(UserBackpackActivity userBackpackActivity); } \ No newline at end of file diff --git a/app/src/main/java/com/tlongdev/bktf/component/FragmentComponent.java b/app/src/main/java/com/tlongdev/bktf/component/FragmentComponent.java index a015452a..1ad6841a 100644 --- a/app/src/main/java/com/tlongdev/bktf/component/FragmentComponent.java +++ b/app/src/main/java/com/tlongdev/bktf/component/FragmentComponent.java @@ -17,7 +17,12 @@ package com.tlongdev.bktf.component; import com.tlongdev.bktf.module.BptfAppModule; +import com.tlongdev.bktf.module.PresenterModule; import com.tlongdev.bktf.ui.fragment.BptfFragment; +import com.tlongdev.bktf.ui.fragment.CalculatorFragment; +import com.tlongdev.bktf.ui.fragment.ConverterFragment; +import com.tlongdev.bktf.ui.fragment.FavoritesFragment; +import com.tlongdev.bktf.ui.fragment.RecentsFragment; import com.tlongdev.bktf.ui.fragment.UnusualFragment; import com.tlongdev.bktf.ui.fragment.UserFragment; @@ -30,7 +35,7 @@ * @since 2016. 03. 10. */ @Singleton -@Component(modules = BptfAppModule.class) +@Component(modules = {PresenterModule.class, BptfAppModule.class}) public interface FragmentComponent { void inject(BptfFragment bptfFragment); @@ -38,4 +43,12 @@ public interface FragmentComponent { void inject(UserFragment userFragment); void inject(UnusualFragment unusualFragment); + + void inject(CalculatorFragment calculatorFragment); + + void inject(ConverterFragment converterFragment); + + void inject(FavoritesFragment favoritesFragment); + + void inject(RecentsFragment recentsFragment); } diff --git a/app/src/main/java/com/tlongdev/bktf/module/PresenterModule.java b/app/src/main/java/com/tlongdev/bktf/module/PresenterModule.java new file mode 100644 index 00000000..19fe0549 --- /dev/null +++ b/app/src/main/java/com/tlongdev/bktf/module/PresenterModule.java @@ -0,0 +1,121 @@ +package com.tlongdev.bktf.module; + +import android.app.Application; + +import com.tlongdev.bktf.BptfApplication; +import com.tlongdev.bktf.presenter.activity.ItemChooserPresenter; +import com.tlongdev.bktf.presenter.activity.ItemDetailPresenter; +import com.tlongdev.bktf.presenter.activity.LicensesPresenter; +import com.tlongdev.bktf.presenter.activity.LoginPresenter; +import com.tlongdev.bktf.presenter.activity.PriceHistoryPresenter; +import com.tlongdev.bktf.presenter.activity.SearchPresenter; +import com.tlongdev.bktf.presenter.activity.SelectItemPresenter; +import com.tlongdev.bktf.presenter.activity.UnusualPresenter; +import com.tlongdev.bktf.presenter.activity.UserBackpackPresenter; +import com.tlongdev.bktf.presenter.activity.UserPresenter; +import com.tlongdev.bktf.presenter.fragment.CalculatorPresenter; +import com.tlongdev.bktf.presenter.fragment.FavoritesPresenter; +import com.tlongdev.bktf.presenter.fragment.RecentsPresenter; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; + +/** + * @author lngtr + * @since 2016. 04. 27. + */ +@Module +public class PresenterModule { + + @Provides + @Singleton + ItemChooserPresenter provideItemChooserPresenter(Application application) { + return new ItemChooserPresenter((BptfApplication) application); + } + + @Provides + @Singleton + ItemDetailPresenter provideItemDetailPresenter(Application application) { + return new ItemDetailPresenter((BptfApplication) application); + } + + @Provides + @Singleton + LicensesPresenter provideLicensesPresenter(Application application) { + return new LicensesPresenter((BptfApplication) application); + } + + @Provides + @Singleton + LoginPresenter provideLoginPresenter(Application application) { + return new LoginPresenter((BptfApplication) application); + } + + @Provides + @Singleton + PriceHistoryPresenter providePriceHistoryPresenter(Application application) { + return new PriceHistoryPresenter((BptfApplication) application); + } + + @Provides + @Singleton + SearchPresenter provideSearchPresenter(Application application) { + return new SearchPresenter((BptfApplication) application); + } + + @Provides + @Singleton + SelectItemPresenter provideSelectItemPresenter(Application application) { + return new SelectItemPresenter((BptfApplication) application); + } + + @Provides + @Singleton + UnusualPresenter provideUnusualPresenter(Application application) { + return new UnusualPresenter((BptfApplication) application); + } + + @Provides + @Singleton + UserBackpackPresenter provideUserBackpackPresenter(Application application) { + return new UserBackpackPresenter((BptfApplication) application); + } + + @Provides + @Singleton + UserPresenter provideUserPresenter(Application application) { + return new UserPresenter((BptfApplication) application); + } + + @Provides + @Singleton + CalculatorPresenter provideCalculatorPresenter(Application application) { + return new CalculatorPresenter((BptfApplication) application); + } + + @Provides + @Singleton + FavoritesPresenter provideFavoritesPresenter(Application application) { + return new FavoritesPresenter((BptfApplication) application); + } + + @Provides + @Singleton + RecentsPresenter provideRecentsPresenter(Application application) { + return new RecentsPresenter((BptfApplication) application); + } + + @Provides + @Singleton + com.tlongdev.bktf.presenter.fragment.UnusualPresenter provideUnusualFragmentPresenter(Application application) { + return new com.tlongdev.bktf.presenter.fragment.UnusualPresenter((BptfApplication) application); + } + + @Provides + @Singleton + com.tlongdev.bktf.presenter.fragment.UserPresenter provideUserFragmentPresenter(Application application) { + return new com.tlongdev.bktf.presenter.fragment.UserPresenter((BptfApplication) application); + } +} diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemChooserActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemChooserActivity.java index 9a07bfb4..1bd40d07 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemChooserActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemChooserActivity.java @@ -44,6 +44,8 @@ import java.util.List; +import javax.inject.Inject; + import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; @@ -58,6 +60,8 @@ public class ItemChooserActivity extends BptfActivity implements ItemChooserView public static final String EXTRA_ITEM = "item"; public static final String EXTRA_IS_FROM_CALCULATOR = "calculator"; + @Inject ItemChooserPresenter mPresenter; + @BindView(R.id.quality) Spinner qualitySpinner; @BindView(R.id.effect) Spinner effectSpinner; @BindView(R.id.weapon_wear) Spinner wearSpinner; @@ -79,7 +83,6 @@ public class ItemChooserActivity extends BptfActivity implements ItemChooserView private QualityAdapter qualityAdapter; private WeaponWearAdapter wearAdapter; private EffectAdapter effectAdapter; - private ItemChooserPresenter mPresenter; @Override protected void onCreate(Bundle savedInstanceState) { @@ -88,6 +91,8 @@ protected void onCreate(Bundle savedInstanceState) { ButterKnife.bind(this); Dart.inject(this); + mApplication.getActivityComponent().inject(this); + mPresenter = new ItemChooserPresenter(mApplication); mPresenter.attachView(this); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemDetailActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemDetailActivity.java index a35713a8..87112e5b 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemDetailActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemDetailActivity.java @@ -36,6 +36,8 @@ import com.tlongdev.bktf.ui.view.activity.ItemDetailView; import com.tlongdev.bktf.util.Utility; +import javax.inject.Inject; + import butterknife.BindView; import butterknife.ButterKnife; @@ -51,6 +53,8 @@ public class ItemDetailActivity extends BptfActivity implements ItemDetailView { public static final String EXTRA_ITEM_TYPE = "type"; public static final String EXTRA_PROPER_NAME = "proper"; + @Inject ItemDetailPresenter mPresenter; + @InjectExtra(EXTRA_GUEST) boolean isGuest; @InjectExtra(EXTRA_ITEM_ID) int mId; @InjectExtra(EXTRA_PROPER_NAME) int mProperName; @@ -77,8 +81,6 @@ public class ItemDetailActivity extends BptfActivity implements ItemDetailView { @BindView(R.id.quality) ImageView quality; @BindView(R.id.card_view) CardView cardView; - private ItemDetailPresenter mPresenter; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -86,6 +88,8 @@ protected void onCreate(Bundle savedInstanceState) { ButterKnife.bind(this); Dart.inject(this); + mApplication.getActivityComponent().inject(this); + mPresenter = new ItemDetailPresenter(mApplication); mPresenter.attachView(this); @@ -211,8 +215,7 @@ public void showItemDetails(BackpackItem item) { Price price = item.getPrice(); - if (price != null) - { + if (price != null) { //Show the priceView priceView.setVisibility(View.VISIBLE); priceView.setText(String.format("%s: %s", diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/LicensesActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/LicensesActivity.java index af2b468c..330c8d58 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/LicensesActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/LicensesActivity.java @@ -32,22 +32,26 @@ import java.util.List; +import javax.inject.Inject; + import butterknife.BindView; import butterknife.ButterKnife; public class LicensesActivity extends BptfActivity implements LicensesView, LicensesAdapter.OnClickListener { + @Inject LicensesPresenter mPresenter; + @BindView(R.id.recycler_view) RecyclerView mRecyclerView; @BindView(R.id.toolbar) Toolbar mToolbar; - private LicensesPresenter mPresenter; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_licenses); ButterKnife.bind(this); + mApplication.getActivityComponent().inject(this); + mPresenter = new LicensesPresenter(mApplication); mPresenter.attachView(this); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/LoginActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/LoginActivity.java index a9f9b29a..7d444632 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/LoginActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/LoginActivity.java @@ -31,17 +31,20 @@ import com.tlongdev.bktf.presenter.activity.LoginPresenter; import com.tlongdev.bktf.ui.view.activity.LoginView; +import javax.inject.Inject; + import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class LoginActivity extends BptfActivity implements LoginView { + @Inject LoginPresenter mPresenter; + @BindView(R.id.steam_id) EditText steamIdInput; @BindView(R.id.toolbar) Toolbar mToolbar; private ProgressDialog loadingDialog; - private LoginPresenter mPresenter; @Override protected void onCreate(Bundle savedInstanceState) { @@ -49,6 +52,8 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_login); ButterKnife.bind(this); + mApplication.getActivityComponent().inject(this); + mPresenter = new LoginPresenter(mApplication); mPresenter.attachView(this); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/PriceHistoryActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/PriceHistoryActivity.java index 85d830a1..7dc435ac 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/PriceHistoryActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/PriceHistoryActivity.java @@ -44,6 +44,8 @@ import java.util.List; +import javax.inject.Inject; + import butterknife.BindView; import butterknife.ButterKnife; @@ -53,6 +55,8 @@ public class PriceHistoryActivity extends BptfActivity implements PriceHistoryVi public static final String EXTRA_ITEM = "item"; + @Inject PriceHistoryPresenter mPresenter; + @InjectExtra(EXTRA_ITEM) Item mItem; @BindView(R.id.recycler_view) RecyclerView mRecyclerView; @@ -61,8 +65,6 @@ public class PriceHistoryActivity extends BptfActivity implements PriceHistoryVi @BindView(R.id.toolbar) Toolbar mToolbar; @BindView(R.id.ad_view) AdView mAdView; - private PriceHistoryPresenter mPresenter; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -70,6 +72,8 @@ protected void onCreate(Bundle savedInstanceState) { ButterKnife.bind(this); Dart.inject(this); + mApplication.getActivityComponent().inject(this); + mPresenter = new PriceHistoryPresenter(mApplication); mPresenter.attachView(this); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/SearchActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/SearchActivity.java index 52df0a76..9836da67 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/SearchActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/SearchActivity.java @@ -43,12 +43,16 @@ import com.tlongdev.bktf.presenter.activity.SearchPresenter; import com.tlongdev.bktf.util.Utility; +import javax.inject.Inject; + import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class SearchActivity extends BptfActivity implements com.tlongdev.bktf.ui.view.activity.SearchView, SearchAdapter.OnSearchClickListener { + @Inject SearchPresenter mPresenter; + @BindView(R.id.recycler_view) RecyclerView mRecyclerView; @BindView(R.id.toolbar) Toolbar mToolbar; @BindView(R.id.ad_view) AdView mAdView; @@ -63,14 +67,14 @@ public class SearchActivity extends BptfActivity implements com.tlongdev.bktf.ui private int filterQuality = Quality.UNIQUE; private String mQuery; - private SearchPresenter mPresenter; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_search); ButterKnife.bind(this); + mApplication.getActivityComponent().inject(this); + mPresenter = new SearchPresenter(mApplication); mPresenter.attachView(this); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/SelectItemActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/SelectItemActivity.java index 0b664f37..1d7b618a 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/SelectItemActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/SelectItemActivity.java @@ -30,6 +30,8 @@ import com.tlongdev.bktf.presenter.activity.SelectItemPresenter; import com.tlongdev.bktf.ui.view.activity.SelectItemView; +import javax.inject.Inject; + import butterknife.BindView; import butterknife.ButterKnife; @@ -39,10 +41,11 @@ public class SelectItemActivity extends BptfActivity implements SelectItemView, public static final String EXTRA_DEFINDEX = "defindex"; public static final String EXTRA_NAME = "name"; + @Inject SelectItemPresenter mPresenter; + @BindView(R.id.recycler_view) RecyclerView mRecyclerView; @BindView(R.id.item_name) EditText inputName; - private SelectItemPresenter mPresenter; private SelectItemAdapter mAdapter; @Override @@ -51,6 +54,8 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_select_item); ButterKnife.bind(this); + mApplication.getActivityComponent().inject(this); + mPresenter = new SelectItemPresenter(mApplication); mPresenter.attachView(this); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/UnusualActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/UnusualActivity.java index c11fc52d..09565407 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/UnusualActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/UnusualActivity.java @@ -47,6 +47,8 @@ import java.util.List; +import javax.inject.Inject; + import butterknife.BindView; import butterknife.ButterKnife; @@ -59,6 +61,8 @@ public class UnusualActivity extends BptfActivity implements UnusualView, TextWa public static final String EXTRA_NAME = "name"; public static final String EXTRA_PRICE_INDEX = "index"; + @Inject UnusualPresenter mPresenter; + @SuppressWarnings("NullableProblems") @Nullable @InjectExtra(EXTRA_DEFINDEX) int mDefindex = -1; @@ -73,7 +77,6 @@ public class UnusualActivity extends BptfActivity implements UnusualView, TextWa @BindView(R.id.ad_view) AdView mAdView; private UnusualAdapter mAdapter; - private UnusualPresenter mPresenter; @Override protected void onCreate(Bundle savedInstanceState) { @@ -82,6 +85,8 @@ protected void onCreate(Bundle savedInstanceState) { ButterKnife.bind(this); Dart.inject(this); + mApplication.getActivityComponent().inject(this); + mPresenter = new UnusualPresenter(mApplication); mPresenter.attachView(this); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/UserActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/UserActivity.java index d5b20f7d..31db1609 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/UserActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/UserActivity.java @@ -33,6 +33,8 @@ import com.tlongdev.bktf.ui.fragment.UserFragment; import com.tlongdev.bktf.ui.view.activity.UserView; +import javax.inject.Inject; + import butterknife.BindView; import butterknife.ButterKnife; @@ -50,13 +52,13 @@ public class UserActivity extends BptfActivity implements UserView{ //Keys for extra data in the intent. public static final String STEAM_ID_KEY = "steamid"; + @Inject UserPresenter mPresenter; + //Progress bar that indicates downloading user data. @BindView(R.id.progress_bar) ProgressBar progressBar; @InjectExtra(STEAM_ID_KEY) String steamId; - private UserPresenter mPresenter; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -64,6 +66,8 @@ protected void onCreate(Bundle savedInstanceState) { ButterKnife.bind(this); Dart.inject(this); + mApplication.getActivityComponent().inject(this); + mPresenter = new UserPresenter(mApplication); mPresenter.attachView(this); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/UserBackpackActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/UserBackpackActivity.java index d8b76dbf..ee181cad 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/UserBackpackActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/UserBackpackActivity.java @@ -40,6 +40,8 @@ import java.util.List; +import javax.inject.Inject; + import butterknife.BindView; import butterknife.ButterKnife; @@ -52,6 +54,8 @@ public class UserBackpackActivity extends BptfActivity implements UserBackpackVi public static final String EXTRA_NAME = "name"; public static final String EXTRA_GUEST = "guest"; + @Inject UserBackpackPresenter mPresenter; + @BindView(R.id.recycler_view) RecyclerView mRecyclerView; @BindView(R.id.ad_view) AdView mAdView; @@ -61,8 +65,6 @@ public class UserBackpackActivity extends BptfActivity implements UserBackpackVi //Boolean to decide which database table to load from private boolean isGuest; - private UserBackpackPresenter mPresenter; - /** * {@inheritDoc} */ @@ -72,6 +74,8 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_user_backpack); ButterKnife.bind(this); + mApplication.getActivityComponent().inject(this); + mPresenter = new UserBackpackPresenter(mApplication); mPresenter.attachView(this); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/CalculatorFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/CalculatorFragment.java index 20190e7e..2c165165 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/CalculatorFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/CalculatorFragment.java @@ -51,6 +51,8 @@ import java.util.List; +import javax.inject.Inject; + import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; @@ -62,6 +64,8 @@ */ public class CalculatorFragment extends BptfFragment implements CalculatorView, MainActivity.OnDrawerOpenedListener{ + @Inject CalculatorPresenter mPresenter; + @BindView(R.id.text_view_price_metal) TextView priceMetal; @BindView(R.id.text_view_price_keys) TextView priceKeys; @BindView(R.id.text_view_price_buds) TextView priceBuds; @@ -72,7 +76,6 @@ public class CalculatorFragment extends BptfFragment implements CalculatorView, @BindView(R.id.ad_view) AdView mAdView; private CalculatorAdapter mAdapter; - private CalculatorPresenter mPresenter; private Unbinder mUnbinder; public CalculatorFragment() { @@ -89,12 +92,14 @@ public void onCreate(Bundle savedInstanceState) { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - mPresenter = new CalculatorPresenter(mApplication); - mPresenter.attachView(this); - View rootView = inflater.inflate(R.layout.fragment_calculator, container, false); mUnbinder = ButterKnife.bind(this, rootView); + mApplication.getFragmentComponent().inject(this); + + mPresenter = new CalculatorPresenter(mApplication); + mPresenter.attachView(this); + //Set the toolbar to the main activity's action bar ((AppCompatActivity) getActivity()).setSupportActionBar((Toolbar) rootView.findViewById(R.id.toolbar)); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/ConverterFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/ConverterFragment.java index a847731d..7fe8e79a 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/ConverterFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/ConverterFragment.java @@ -96,7 +96,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View rootView = inflater.inflate(R.layout.fragment_converter, container, false); - mUnbinder = ButterKnife.bind(this, rootView); //Set the toolbar to the main activity's action bar diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/FavoritesFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/FavoritesFragment.java index ef897ae0..5d117631 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/FavoritesFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/FavoritesFragment.java @@ -52,6 +52,8 @@ import java.util.List; +import javax.inject.Inject; + import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; @@ -63,12 +65,13 @@ public class FavoritesFragment extends BptfFragment implements FavoritesView, MainActivity.OnDrawerOpenedListener, FavoritesAdapter.OnMoreListener { + @Inject FavoritesPresenter mPresenter; + @BindView(R.id.app_bar_layout) AppBarLayout mAppBarLayout; @BindView(R.id.coordinator_layout) CoordinatorLayout mCoordinatorLayout; @BindView(R.id.recycler_view) RecyclerView mRecyclerView; @BindView(R.id.ad_view) AdView mAdView; - private FavoritesPresenter mPresenter; private FavoritesAdapter mAdapter; private Unbinder mUnbinder; @@ -94,13 +97,15 @@ public void onActivityCreated(Bundle savedInstanceState) { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - mPresenter = new FavoritesPresenter(mApplication); - mPresenter.attachView(this); - // Inflate the layout for this fragment View rootView = inflater.inflate(R.layout.fragment_favorites, container, false); mUnbinder = ButterKnife.bind(this, rootView); + mApplication.getFragmentComponent().inject(this); + + mPresenter = new FavoritesPresenter(mApplication); + mPresenter.attachView(this); + //Set the toolbar to the main activity's action bar ((AppCompatActivity) getActivity()).setSupportActionBar((Toolbar) rootView.findViewById(R.id.toolbar)); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/RecentsFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/RecentsFragment.java index 142012b7..90415cb3 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/RecentsFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/RecentsFragment.java @@ -62,6 +62,8 @@ import com.tlongdev.bktf.ui.view.fragment.RecentsView; import com.tlongdev.bktf.util.Utility; +import javax.inject.Inject; + import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; @@ -72,6 +74,8 @@ public class RecentsFragment extends BptfFragment implements RecentsView, SwipeRefreshLayout.OnRefreshListener, MainActivity.OnDrawerOpenedListener, RecentsAdapter.OnMoreListener { + @Inject RecentsPresenter mPresenter; + @BindView(R.id.progress_bar) ProgressBar progressBar; @BindView(R.id.swipe_refresh) SwipeRefreshLayout mSwipeRefreshLayout; @BindView(R.id.recycler_view) RecyclerView mRecyclerView; @@ -94,7 +98,6 @@ public class RecentsFragment extends BptfFragment implements RecentsView, private Context mContext; - private RecentsPresenter mPresenter; private Unbinder mUnbinder; /** @@ -125,12 +128,14 @@ public void onActivityCreated(Bundle savedInstanceState) { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - mPresenter = new RecentsPresenter(mApplication); - mPresenter.attachView(this); - View rootView = inflater.inflate(R.layout.fragment_recents, container, false); mUnbinder = ButterKnife.bind(this, rootView); + mApplication.getFragmentComponent().inject(this); + + mPresenter = new RecentsPresenter(mApplication); + mPresenter.attachView(this); + //Set the toolbar to the main activity's action bar ((AppCompatActivity) mContext).setSupportActionBar((Toolbar) rootView.findViewById(R.id.toolbar)); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UnusualFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UnusualFragment.java index b4247069..6e43ad1a 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UnusualFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UnusualFragment.java @@ -64,6 +64,7 @@ public class UnusualFragment extends BptfFragment implements UnusualView, MainActivity.OnDrawerOpenedListener, TextWatcher, UnusualAdapter.OnItemClickListener { + @Inject UnusualPresenter mPresenter; @Inject Context mContext; @BindView(R.id.app_bar_layout) AppBarLayout mAppBarLayout; @@ -93,7 +94,6 @@ public class UnusualFragment extends BptfFragment implements UnusualView, */ private MenuItem effectMenuItem; - private UnusualPresenter mPresenter; private Unbinder mUnbinder; /** @@ -116,6 +116,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, View rootView = inflater.inflate(R.layout.fragment_unusual, container, false); mUnbinder = ButterKnife.bind(this, rootView); + mApplication.getFragmentComponent().inject(this); mPresenter = new UnusualPresenter(mApplication); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java index 994c7c35..356ecc2f 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java @@ -72,6 +72,7 @@ public class UserFragment extends BptfFragment implements UserView, View.OnClick private static final String USER_PARAM = "user_param"; + @Inject UserPresenter mPresenter; @Inject SharedPreferences mPrefs; @Inject ProfileManager mProfileManager; @Inject Context mContext; @@ -100,8 +101,6 @@ public class UserFragment extends BptfFragment implements UserView, View.OnClick //Stores whether the backpack is private or not private boolean privateBackpack = false; - private UserPresenter mPresenter; - private User mUser; private boolean searchedUser; @@ -144,15 +143,15 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, searchedUser = true; } + View rootView = inflater.inflate(R.layout.fragment_user, container, false); + mUnbinder = ButterKnife.bind(this, rootView); + mApplication.getFragmentComponent().inject(this); mPresenter = new UserPresenter(mApplication); mPresenter.attachView(this); mPresenter.setSearchedUser(searchedUser); - View rootView = inflater.inflate(R.layout.fragment_user, container, false); - mUnbinder = ButterKnife.bind(this, rootView); - //Set the toolbar to the main activity's action bar ((AppCompatActivity) getActivity()).setSupportActionBar((Toolbar) rootView.findViewById(R.id.toolbar)); From 4cdee764a8f34607be8af95ae2ec79ada34ccb00 Mon Sep 17 00:00:00 2001 From: Long Tran Date: Wed, 27 Apr 2016 10:14:13 +0200 Subject: [PATCH 05/18] fixed slow startup --- .../java/com/tlongdev/bktf/ads/AdManager.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/tlongdev/bktf/ads/AdManager.java b/app/src/main/java/com/tlongdev/bktf/ads/AdManager.java index b16d212f..82fb115a 100644 --- a/app/src/main/java/com/tlongdev/bktf/ads/AdManager.java +++ b/app/src/main/java/com/tlongdev/bktf/ads/AdManager.java @@ -2,6 +2,7 @@ import android.content.Context; import android.content.SharedPreferences; +import android.os.Handler; import android.preference.PreferenceManager; import android.view.View; @@ -23,6 +24,8 @@ public class AdManager implements SharedPreferences.OnSharedPreferenceChangeList private boolean mAdsEnabled; + private boolean mInit = true; + private Set mAdViews = new HashSet<>(); public AdManager(Context context) { @@ -51,11 +54,23 @@ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, Strin } } - public void addAdView(AdView adView) { + public void addAdView(final AdView adView) { mAdViews.add(adView); adView.setAdListener(new AppearAdListener(adView)); if (mAdsEnabled) { - adView.loadAd(new AdRequest.Builder().build()); + if (!mInit) { + adView.loadAd(new AdRequest.Builder().build()); + } else { + mInit = false; + final Handler handler = new Handler(); + handler.postDelayed(new Runnable() { + @Override + public void run() { + AdRequest adRequest = new AdRequest.Builder().build(); + adView.loadAd(adRequest); + } + }, 1000); + } } } From 52937b998fa5b9a890f7f9a2f0004a458579ea1e Mon Sep 17 00:00:00 2001 From: Long Tran Date: Wed, 27 Apr 2016 11:11:57 +0200 Subject: [PATCH 06/18] really inject presenters --- .../java/com/tlongdev/bktf/BptfApplication.java | 4 ++++ .../tlongdev/bktf/module/PresenterModule.java | 16 ++++++++++++++++ .../bktf/ui/activity/ItemChooserActivity.java | 1 - .../bktf/ui/activity/ItemDetailActivity.java | 1 - .../bktf/ui/activity/LicensesActivity.java | 1 - .../tlongdev/bktf/ui/activity/LoginActivity.java | 1 - .../bktf/ui/activity/PriceHistoryActivity.java | 1 - .../bktf/ui/activity/SearchActivity.java | 1 - .../bktf/ui/activity/SelectItemActivity.java | 1 - .../bktf/ui/activity/UnusualActivity.java | 1 - .../tlongdev/bktf/ui/activity/UserActivity.java | 1 - .../bktf/ui/activity/UserBackpackActivity.java | 1 - .../bktf/ui/fragment/CalculatorFragment.java | 1 - .../bktf/ui/fragment/FavoritesFragment.java | 1 - .../bktf/ui/fragment/RecentsFragment.java | 1 - .../bktf/ui/fragment/UnusualFragment.java | 1 - .../tlongdev/bktf/ui/fragment/UserFragment.java | 1 - 17 files changed, 20 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/tlongdev/bktf/BptfApplication.java b/app/src/main/java/com/tlongdev/bktf/BptfApplication.java index dda06db2..1e0d018e 100644 --- a/app/src/main/java/com/tlongdev/bktf/BptfApplication.java +++ b/app/src/main/java/com/tlongdev/bktf/BptfApplication.java @@ -38,6 +38,7 @@ import com.tlongdev.bktf.component.ServiceComponent; import com.tlongdev.bktf.module.BptfAppModule; import com.tlongdev.bktf.module.NetworkModule; +import com.tlongdev.bktf.module.PresenterModule; import com.tlongdev.bktf.module.StorageModule; import com.tlongdev.bktf.util.ProfileManager; @@ -73,13 +74,16 @@ public void onCreate() { BptfAppModule appModule = new BptfAppModule(this); StorageModule storageModule = new StorageModule(); NetworkModule networkModule = new NetworkModule(); + PresenterModule presenterModule = new PresenterModule(); mActivityComponent = DaggerActivityComponent.builder() .bptfAppModule(appModule) + .presenterModule(presenterModule) .build(); mFragmentComponent = DaggerFragmentComponent.builder() .bptfAppModule(appModule) + .presenterModule(presenterModule) .build(); mInteractorComponent = DaggerInteractorComponent.builder() diff --git a/app/src/main/java/com/tlongdev/bktf/module/PresenterModule.java b/app/src/main/java/com/tlongdev/bktf/module/PresenterModule.java index 19fe0549..4a79253a 100644 --- a/app/src/main/java/com/tlongdev/bktf/module/PresenterModule.java +++ b/app/src/main/java/com/tlongdev/bktf/module/PresenterModule.java @@ -1,3 +1,19 @@ +/** + * Copyright 2016 Long Tran + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.tlongdev.bktf.module; import android.app.Application; diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemChooserActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemChooserActivity.java index 1bd40d07..832ce7cc 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemChooserActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemChooserActivity.java @@ -93,7 +93,6 @@ protected void onCreate(Bundle savedInstanceState) { mApplication.getActivityComponent().inject(this); - mPresenter = new ItemChooserPresenter(mApplication); mPresenter.attachView(this); setTitle(null); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemDetailActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemDetailActivity.java index 87112e5b..fc6000ca 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemDetailActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/ItemDetailActivity.java @@ -90,7 +90,6 @@ protected void onCreate(Bundle savedInstanceState) { mApplication.getActivityComponent().inject(this); - mPresenter = new ItemDetailPresenter(mApplication); mPresenter.attachView(this); //Scale the icon, so the width of the image view is on third of the screen's width diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/LicensesActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/LicensesActivity.java index 330c8d58..92f45d96 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/LicensesActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/LicensesActivity.java @@ -52,7 +52,6 @@ protected void onCreate(Bundle savedInstanceState) { mApplication.getActivityComponent().inject(this); - mPresenter = new LicensesPresenter(mApplication); mPresenter.attachView(this); setSupportActionBar(mToolbar); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/LoginActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/LoginActivity.java index 7d444632..2d1c328b 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/LoginActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/LoginActivity.java @@ -54,7 +54,6 @@ protected void onCreate(Bundle savedInstanceState) { mApplication.getActivityComponent().inject(this); - mPresenter = new LoginPresenter(mApplication); mPresenter.attachView(this); setSupportActionBar(mToolbar); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/PriceHistoryActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/PriceHistoryActivity.java index 7dc435ac..b87f433a 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/PriceHistoryActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/PriceHistoryActivity.java @@ -74,7 +74,6 @@ protected void onCreate(Bundle savedInstanceState) { mApplication.getActivityComponent().inject(this); - mPresenter = new PriceHistoryPresenter(mApplication); mPresenter.attachView(this); setSupportActionBar(mToolbar); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/SearchActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/SearchActivity.java index 9836da67..0aff741e 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/SearchActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/SearchActivity.java @@ -75,7 +75,6 @@ protected void onCreate(Bundle savedInstanceState) { mApplication.getActivityComponent().inject(this); - mPresenter = new SearchPresenter(mApplication); mPresenter.attachView(this); setSupportActionBar(mToolbar); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/SelectItemActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/SelectItemActivity.java index 1d7b618a..dcd34ca3 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/SelectItemActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/SelectItemActivity.java @@ -56,7 +56,6 @@ protected void onCreate(Bundle savedInstanceState) { mApplication.getActivityComponent().inject(this); - mPresenter = new SelectItemPresenter(mApplication); mPresenter.attachView(this); setFinishOnTouchOutside(false); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/UnusualActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/UnusualActivity.java index 09565407..2cb3694d 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/UnusualActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/UnusualActivity.java @@ -87,7 +87,6 @@ protected void onCreate(Bundle savedInstanceState) { mApplication.getActivityComponent().inject(this); - mPresenter = new UnusualPresenter(mApplication); mPresenter.attachView(this); setSupportActionBar(mToolbar); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/UserActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/UserActivity.java index 31db1609..c08164a9 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/UserActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/UserActivity.java @@ -68,7 +68,6 @@ protected void onCreate(Bundle savedInstanceState) { mApplication.getActivityComponent().inject(this); - mPresenter = new UserPresenter(mApplication); mPresenter.attachView(this); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/UserBackpackActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/UserBackpackActivity.java index ee181cad..2222df29 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/UserBackpackActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/UserBackpackActivity.java @@ -76,7 +76,6 @@ protected void onCreate(Bundle savedInstanceState) { mApplication.getActivityComponent().inject(this); - mPresenter = new UserBackpackPresenter(mApplication); mPresenter.attachView(this); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/CalculatorFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/CalculatorFragment.java index 2c165165..e29e1f31 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/CalculatorFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/CalculatorFragment.java @@ -97,7 +97,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, mApplication.getFragmentComponent().inject(this); - mPresenter = new CalculatorPresenter(mApplication); mPresenter.attachView(this); //Set the toolbar to the main activity's action bar diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/FavoritesFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/FavoritesFragment.java index 5d117631..1df3a9fb 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/FavoritesFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/FavoritesFragment.java @@ -103,7 +103,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, mApplication.getFragmentComponent().inject(this); - mPresenter = new FavoritesPresenter(mApplication); mPresenter.attachView(this); //Set the toolbar to the main activity's action bar diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/RecentsFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/RecentsFragment.java index 90415cb3..5b406f97 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/RecentsFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/RecentsFragment.java @@ -133,7 +133,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, mApplication.getFragmentComponent().inject(this); - mPresenter = new RecentsPresenter(mApplication); mPresenter.attachView(this); //Set the toolbar to the main activity's action bar diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UnusualFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UnusualFragment.java index 6e43ad1a..ce7620a8 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UnusualFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UnusualFragment.java @@ -119,7 +119,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, mApplication.getFragmentComponent().inject(this); - mPresenter = new UnusualPresenter(mApplication); mPresenter.attachView(this); //Set the toolbar to the main activity's action bar diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java index 356ecc2f..83c8e537 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java @@ -148,7 +148,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, mApplication.getFragmentComponent().inject(this); - mPresenter = new UserPresenter(mApplication); mPresenter.attachView(this); mPresenter.setSearchedUser(searchedUser); From a071642b8369ca672f4e3ba1fe6448b60611f6fa Mon Sep 17 00:00:00 2001 From: Long Tran Date: Fri, 29 Apr 2016 12:20:19 +0200 Subject: [PATCH 07/18] navigaton drawer manager --- .../com/tlongdev/bktf/BptfApplication.java | 12 ++ .../component/DrawerManagerComponent.java | 18 +++ .../tlongdev/bktf/module/BptfAppModule.java | 7 ++ .../presenter/fragment/UserPresenter.java | 2 - .../bktf/ui/NavigationDrawerManager.java | 116 ++++++++++++++++++ .../bktf/ui/activity/MainActivity.java | 73 ++--------- .../bktf/ui/fragment/UserFragment.java | 5 - .../bktf/ui/view/fragment/UserView.java | 2 - .../tlongdev/bktf/util/ProfileManager.java | 29 ++++- 9 files changed, 191 insertions(+), 73 deletions(-) create mode 100644 app/src/main/java/com/tlongdev/bktf/component/DrawerManagerComponent.java create mode 100644 app/src/main/java/com/tlongdev/bktf/ui/NavigationDrawerManager.java diff --git a/app/src/main/java/com/tlongdev/bktf/BptfApplication.java b/app/src/main/java/com/tlongdev/bktf/BptfApplication.java index 1e0d018e..d81f44d6 100644 --- a/app/src/main/java/com/tlongdev/bktf/BptfApplication.java +++ b/app/src/main/java/com/tlongdev/bktf/BptfApplication.java @@ -26,11 +26,13 @@ import com.tlongdev.bktf.component.AdapterComponent; import com.tlongdev.bktf.component.DaggerActivityComponent; import com.tlongdev.bktf.component.DaggerAdapterComponent; +import com.tlongdev.bktf.component.DaggerDrawerManagerComponent; import com.tlongdev.bktf.component.DaggerFragmentComponent; import com.tlongdev.bktf.component.DaggerInteractorComponent; import com.tlongdev.bktf.component.DaggerPresenterComponent; import com.tlongdev.bktf.component.DaggerProfileManagerComponent; import com.tlongdev.bktf.component.DaggerServiceComponent; +import com.tlongdev.bktf.component.DrawerManagerComponent; import com.tlongdev.bktf.component.FragmentComponent; import com.tlongdev.bktf.component.InteractorComponent; import com.tlongdev.bktf.component.PresenterComponent; @@ -64,6 +66,8 @@ public class BptfApplication extends Application { private ServiceComponent mServiceComponent; + private DrawerManagerComponent mDrawerManagerComponent; + @Override public void onCreate() { super.onCreate(); @@ -110,6 +114,10 @@ public void onCreate() { .storageModule(storageModule) .build(); + mDrawerManagerComponent = DaggerDrawerManagerComponent.builder() + .bptfAppModule(appModule) + .build(); + if (!BuildConfig.DEBUG) { ProfileManager manager = new ProfileManager(this); if (manager.isSignedIn()) { @@ -164,4 +172,8 @@ public AdapterComponent getAdapterComponent() { public ServiceComponent getServiceComponent() { return mServiceComponent; } + + public DrawerManagerComponent getDrawerManagerComponent() { + return mDrawerManagerComponent; + } } \ No newline at end of file diff --git a/app/src/main/java/com/tlongdev/bktf/component/DrawerManagerComponent.java b/app/src/main/java/com/tlongdev/bktf/component/DrawerManagerComponent.java new file mode 100644 index 00000000..40dfbf9b --- /dev/null +++ b/app/src/main/java/com/tlongdev/bktf/component/DrawerManagerComponent.java @@ -0,0 +1,18 @@ +package com.tlongdev.bktf.component; + +import com.tlongdev.bktf.module.BptfAppModule; +import com.tlongdev.bktf.ui.NavigationDrawerManager; + +import javax.inject.Singleton; + +import dagger.Component; + +/** + * @author longi + * @since 2016.04.29. + */ +@Singleton +@Component(modules = {BptfAppModule.class}) +public interface DrawerManagerComponent { + void inject(NavigationDrawerManager navigationDrawerManager); +} diff --git a/app/src/main/java/com/tlongdev/bktf/module/BptfAppModule.java b/app/src/main/java/com/tlongdev/bktf/module/BptfAppModule.java index 6b299a96..bdac745f 100644 --- a/app/src/main/java/com/tlongdev/bktf/module/BptfAppModule.java +++ b/app/src/main/java/com/tlongdev/bktf/module/BptfAppModule.java @@ -25,6 +25,7 @@ import com.google.gson.Gson; import com.tlongdev.bktf.BptfApplication; import com.tlongdev.bktf.ads.AdManager; +import com.tlongdev.bktf.ui.NavigationDrawerManager; import com.tlongdev.bktf.util.ProfileManager; import javax.inject.Singleton; @@ -92,4 +93,10 @@ ProfileManager provideProfileManager(Application application) { AdManager provideAdManager(Application application) { return new AdManager(application); } + + @Provides + @Singleton + NavigationDrawerManager provideNavigationDrawerManager(Application application) { + return new NavigationDrawerManager((BptfApplication) application); + } } diff --git a/app/src/main/java/com/tlongdev/bktf/presenter/fragment/UserPresenter.java b/app/src/main/java/com/tlongdev/bktf/presenter/fragment/UserPresenter.java index 76202b24..a97420df 100644 --- a/app/src/main/java/com/tlongdev/bktf/presenter/fragment/UserPresenter.java +++ b/app/src/main/java/com/tlongdev/bktf/presenter/fragment/UserPresenter.java @@ -133,7 +133,6 @@ public void onUserBackpackFinished(User user) { mView.backpack(false); mView.updateUserPage(mProfileManager.getUser()); mView.hideRefreshingAnimation(); - mView.updateDrawer(); } } @@ -151,7 +150,6 @@ public void onPrivateBackpack() { mView.backpack(true); mView.updateUserPage(user); mView.hideRefreshingAnimation(); - mView.updateDrawer(); } } diff --git a/app/src/main/java/com/tlongdev/bktf/ui/NavigationDrawerManager.java b/app/src/main/java/com/tlongdev/bktf/ui/NavigationDrawerManager.java new file mode 100644 index 00000000..2fb67513 --- /dev/null +++ b/app/src/main/java/com/tlongdev/bktf/ui/NavigationDrawerManager.java @@ -0,0 +1,116 @@ +package com.tlongdev.bktf.ui; + +import android.content.Context; +import android.content.SharedPreferences; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.engine.DiskCacheStrategy; +import com.tlongdev.bktf.BptfApplication; +import com.tlongdev.bktf.R; +import com.tlongdev.bktf.model.User; +import com.tlongdev.bktf.util.CircleTransform; +import com.tlongdev.bktf.util.ProfileManager; + +import javax.inject.Inject; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * @author longi + * @since 2016.04.29. + */ +public class NavigationDrawerManager implements SharedPreferences.OnSharedPreferenceChangeListener { + + @Inject ProfileManager mProfileManager; + @Inject SharedPreferences mPrefs; + @Inject Context mContext; + + @BindView(R.id.user_name) TextView mName; + @BindView(R.id.backpack_value) TextView mBackpack; + @BindView(R.id.avatar) ImageView mAvatar; + + private MenuItem mUserMenuItem; + + public NavigationDrawerManager(BptfApplication application) { + application.getDrawerManagerComponent().inject(this); + //mProfileManager.addOnProfileUpdateListener(this); + mPrefs.registerOnSharedPreferenceChangeListener(this); + } + + public void attachView(View header) { + ButterKnife.bind(this, header); + + mContext = header.getContext(); + if (mProfileManager.isSignedIn()) { + update(mProfileManager.getUser()); + } + } + + public void detachView() { + mName = null; + mBackpack = null; + mAvatar = null; + mContext = null; + } + + public void onLogOut() { + Glide.with(mContext) + .load(R.drawable.steam_default_avatar) + .diskCacheStrategy(DiskCacheStrategy.ALL) + .transform(new CircleTransform(mContext)) + .into(mAvatar); + mName.setText(null); + mBackpack.setText(null); + + if (mUserMenuItem != null) { + mUserMenuItem.setEnabled(false); + } + } + + public void update(User user) { + //Set the name + mName.setText(user.getName()); + + //Set the backpack value + double bpValue = user.getBackpackValue(); + if (bpValue >= 0) { + mBackpack.setText(String.format("Backpack: %s", + mContext.getString(R.string.currency_metal, + String.valueOf(Math.round(bpValue))))); + } else { + mBackpack.setText("Private backpack"); + } + + //Download the avatar (if needed) and set it + Glide.with(mContext) + .load(user.getAvatarUrl()) + .diskCacheStrategy(DiskCacheStrategy.ALL) + .transform(new CircleTransform(mContext)) + .into(mAvatar); + if (mUserMenuItem != null) { + mUserMenuItem.setEnabled(true); + } + } + + public void setUserMenuItem(MenuItem userMenuItem) { + mUserMenuItem = userMenuItem; + } + + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + if (!key.equals(mContext.getString(R.string.pref_user_data))) { + return; + } + + if (mProfileManager.isSignedIn()) { + update(mProfileManager.getUser()); + } else { + onLogOut(); + } + } +} diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/MainActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/MainActivity.java index 38605b0d..97bf4892 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/MainActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/MainActivity.java @@ -33,22 +33,17 @@ import android.support.v7.widget.Toolbar; import android.view.MenuItem; import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.tlongdev.bktf.BptfApplication; import com.tlongdev.bktf.R; import com.tlongdev.bktf.gcm.GcmRegisterPriceUpdatesService; -import com.tlongdev.bktf.model.User; +import com.tlongdev.bktf.ui.NavigationDrawerManager; import com.tlongdev.bktf.ui.fragment.CalculatorFragment; import com.tlongdev.bktf.ui.fragment.ConverterFragment; import com.tlongdev.bktf.ui.fragment.FavoritesFragment; import com.tlongdev.bktf.ui.fragment.RecentsFragment; import com.tlongdev.bktf.ui.fragment.UnusualFragment; import com.tlongdev.bktf.ui.fragment.UserFragment; -import com.tlongdev.bktf.util.CircleTransform; import com.tlongdev.bktf.util.ProfileManager; import com.tlongdev.bktf.util.Utility; @@ -83,6 +78,7 @@ public class MainActivity extends AppCompatActivity { @Inject SharedPreferences mPrefs; @Inject ProfileManager mProfileManager; + @Inject NavigationDrawerManager mNavigationDrawerManager; @BindView(R.id.drawer_layout) DrawerLayout mDrawerLayout; @BindView(R.id.navigation_view) NavigationView mNavigationView; @@ -108,15 +104,6 @@ public class MainActivity extends AppCompatActivity { */ private OnDrawerOpenedListener mDrawerListener; - /** - * Views of the navigation header view. - */ - private TextView mName; - private TextView mBackpack; - private ImageView mAvatar; - - private MenuItem mUserMenuItem; - /** * Listener for the navigation drawer. */ @@ -178,15 +165,8 @@ protected void onCreate(Bundle savedInstanceState) { //The navigation view mNavigationView.setNavigationItemSelectedListener(navigationListener); - //User clicked on the header - View navigationHeader = mNavigationView.getHeaderView(0); - - //Find the views of the navigation drawer header - mName = (TextView) navigationHeader.findViewById(R.id.user_name); - mBackpack = (TextView) navigationHeader.findViewById(R.id.backpack_value); - mAvatar = (ImageView) navigationHeader.findViewById(R.id.avatar); - - mUserMenuItem = mNavigationView.getMenu().getItem(2); + mNavigationDrawerManager.attachView(mNavigationView.getHeaderView(0)); + mNavigationDrawerManager.setUserMenuItem(mNavigationView.getMenu().getItem(2)); //Check if there is a fragment to be restored if (savedInstanceState != null) { @@ -217,7 +197,6 @@ protected void onResume() { } mUserStateChanged = false; } - updateDrawer(); boolean autoSync = !mPrefs.getString(getString(R.string.pref_auto_sync), "1").equals("0"); @@ -230,6 +209,12 @@ protected void onResume() { super.onResume(); } + @Override + protected void onDestroy() { + super.onDestroy(); + mNavigationDrawerManager.detachView(); + } + @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); @@ -356,44 +341,6 @@ private void switchFragment(int position) { transaction.commit(); } - /** - * Updates the information in the navigation drawer header. - */ - public void updateDrawer() { - if (mProfileManager.isSignedIn()) { - User user = mProfileManager.getUser(); - - //Set the name - mName.setText(user.getName()); - - //Set the backpack value - double bpValue = user.getBackpackValue(); - if (bpValue >= 0) { - mBackpack.setText(String.format("Backpack: %s", getString(R.string.currency_metal, - String.valueOf(Math.round(bpValue))))); - } else { - mBackpack.setText("Private backpack"); - } - - //Download the avatar (if needed) and set it - Glide.with(this) - .load(user.getAvatarUrl()) - .diskCacheStrategy(DiskCacheStrategy.ALL) - .transform(new CircleTransform(this)) - .into(mAvatar); - mUserMenuItem.setEnabled(true); - } else { - Glide.with(this) - .load(R.drawable.steam_default_avatar) - .diskCacheStrategy(DiskCacheStrategy.ALL) - .transform(new CircleTransform(this)) - .into(mAvatar); - mName.setText(null); - mBackpack.setText(null); - mUserMenuItem.setEnabled(false); - } - } - /** * Restores the navigation icon of the toolbar. */ diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java index 83c8e537..fe83cbbc 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java @@ -447,9 +447,4 @@ public void hideRefreshingAnimation() { public void backpack(boolean _private) { privateBackpack = _private; } - - @Override - public void updateDrawer() { - ((MainActivity) getActivity()).updateDrawer(); - } } \ No newline at end of file diff --git a/app/src/main/java/com/tlongdev/bktf/ui/view/fragment/UserView.java b/app/src/main/java/com/tlongdev/bktf/ui/view/fragment/UserView.java index 9a27cd83..53192820 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/view/fragment/UserView.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/view/fragment/UserView.java @@ -15,6 +15,4 @@ public interface UserView extends BaseView { void updateUserPage(User user); void backpack(boolean _private); - - void updateDrawer(); } \ No newline at end of file diff --git a/app/src/main/java/com/tlongdev/bktf/util/ProfileManager.java b/app/src/main/java/com/tlongdev/bktf/util/ProfileManager.java index b4d2c4a5..ea5a76f5 100644 --- a/app/src/main/java/com/tlongdev/bktf/util/ProfileManager.java +++ b/app/src/main/java/com/tlongdev/bktf/util/ProfileManager.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -24,6 +24,9 @@ import com.tlongdev.bktf.R; import com.tlongdev.bktf.model.User; +import java.util.LinkedList; +import java.util.List; + import javax.inject.Inject; /** @@ -38,6 +41,8 @@ public class ProfileManager { private User mUserCache; + private List mListeners = new LinkedList<>(); + public ProfileManager(BptfApplication application) { application.getProfileManagerComponent().inject(this); } @@ -76,6 +81,10 @@ public void saveUser(User user) { String json = mGson.toJson(user); mEditor.putString(mContext.getString(R.string.pref_user_data), json); mEditor.apply(); + + for (OnUpdateListener listener : mListeners) { + listener.onUpdate(mUserCache); + } } /** @@ -96,5 +105,23 @@ public String getResolvedSteamId() { public void logOut() { mEditor.remove(mContext.getString(R.string.pref_user_data)); mEditor.apply(); + + for (OnUpdateListener listener : mListeners) { + listener.onLogOut(); + } + } + + public void addOnProfileUpdateListener(OnUpdateListener listener) { + mListeners.add(listener); + } + + public void removeOnUpdateListener(OnUpdateListener listener) { + mListeners.remove(listener); + } + + public interface OnUpdateListener { + void onLogOut(); + + void onUpdate(User user); } } From 73f5f5c6566ba05fe774791217049cb728636fc7 Mon Sep 17 00:00:00 2001 From: Long Tran Date: Fri, 29 Apr 2016 12:31:34 +0200 Subject: [PATCH 08/18] no need to retain fragments --- .../bktf/ui/activity/MainActivity.java | 66 ++++--------------- .../bktf/ui/fragment/CalculatorFragment.java | 5 +- .../bktf/ui/fragment/ConverterFragment.java | 5 +- .../bktf/ui/fragment/FavoritesFragment.java | 6 -- .../bktf/ui/fragment/RecentsFragment.java | 9 +-- .../bktf/ui/fragment/UnusualFragment.java | 5 +- .../bktf/ui/fragment/UserFragment.java | 5 +- 7 files changed, 23 insertions(+), 78 deletions(-) diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/MainActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/MainActivity.java index 97bf4892..ba765880 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/MainActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/MainActivity.java @@ -64,18 +64,6 @@ public class MainActivity extends AppCompatActivity { private static final int REQUEST_SETTINGS = 100; public static final int REQUEST_NEW_ITEM = 101; - private static final String FRAGMENT_TAG_RECENTS = "recents"; - private static final String FRAGMENT_TAG_UNUSUALS = "unusuals"; - private static final String FRAGMENT_TAG_USER = "user"; - private static final String FRAGMENT_TAG_FAVORITES = "favorites"; - private static final String FRAGMENT_TAG_CONVERTER = "converter"; - private static final String FRAGMENT_TAG_CALCULATOR = "calculator"; - - /** - * Remember the position of the selected item. - */ - private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position"; - @Inject SharedPreferences mPrefs; @Inject ProfileManager mProfileManager; @Inject NavigationDrawerManager mNavigationDrawerManager; @@ -169,10 +157,7 @@ protected void onCreate(Bundle savedInstanceState) { mNavigationDrawerManager.setUserMenuItem(mNavigationView.getMenu().getItem(2)); //Check if there is a fragment to be restored - if (savedInstanceState != null) { - switchFragment(savedInstanceState.getInt(STATE_SELECTED_POSITION)); - mNavigationView.getMenu().getItem(mCurrentSelectedPosition).setChecked(true); - } else { + if (savedInstanceState == null) { mNavigationView.getMenu().getItem(0).setChecked(true); // Select either the default item (0) or the last selected item. switchFragment(0); @@ -215,13 +200,6 @@ protected void onDestroy() { mNavigationDrawerManager.detachView(); } - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - //Save the current fragment to be restored. - outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition); - } - @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_SETTINGS) { @@ -286,52 +264,34 @@ private void switchFragment(int position) { //Initialize fragments and add them is the drawer listener switch (position) { case 0: - newFragment = fragmentManager.findFragmentByTag(FRAGMENT_TAG_RECENTS); - if (newFragment == null) { - newFragment = new RecentsFragment(); - } + newFragment = new RecentsFragment(); mDrawerListener = (RecentsFragment) newFragment; - transaction.replace(R.id.container, newFragment, FRAGMENT_TAG_RECENTS); + transaction.replace(R.id.container, newFragment); break; case 1: - newFragment = fragmentManager.findFragmentByTag(FRAGMENT_TAG_UNUSUALS); - if (newFragment == null) { - newFragment = new UnusualFragment(); - } + newFragment = new UnusualFragment(); mDrawerListener = (UnusualFragment) newFragment; - transaction.replace(R.id.container, newFragment, FRAGMENT_TAG_UNUSUALS); + transaction.replace(R.id.container, newFragment); break; case 2: - newFragment = fragmentManager.findFragmentByTag(FRAGMENT_TAG_USER); - if (newFragment == null) { - newFragment = UserFragment.newInstance(); - } + newFragment = UserFragment.newInstance(); mDrawerListener = (UserFragment) newFragment; - transaction.replace(R.id.container, newFragment, FRAGMENT_TAG_USER); + transaction.replace(R.id.container, newFragment); break; case 3: - newFragment = fragmentManager.findFragmentByTag(FRAGMENT_TAG_FAVORITES); - if (newFragment == null) { - newFragment = new FavoritesFragment(); - } + newFragment = new FavoritesFragment(); mDrawerListener = (FavoritesFragment) newFragment; - transaction.replace(R.id.container, newFragment, FRAGMENT_TAG_FAVORITES); + transaction.replace(R.id.container, newFragment); break; case 4: - newFragment = fragmentManager.findFragmentByTag(FRAGMENT_TAG_CONVERTER); - if (newFragment == null) { - newFragment = new ConverterFragment(); - } + newFragment = new ConverterFragment(); mDrawerListener = null; - transaction.replace(R.id.container, newFragment, FRAGMENT_TAG_CONVERTER); + transaction.replace(R.id.container, newFragment); break; case 5: - newFragment = fragmentManager.findFragmentByTag(FRAGMENT_TAG_CALCULATOR); - if (newFragment == null) { - newFragment = new CalculatorFragment(); - } + newFragment = new CalculatorFragment(); mDrawerListener = (CalculatorFragment) newFragment; - transaction.replace(R.id.container, newFragment, FRAGMENT_TAG_CALCULATOR); + transaction.replace(R.id.container, newFragment); break; default: throw new IllegalArgumentException("unknown fragment to switch to: " + position); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/CalculatorFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/CalculatorFragment.java index e29e1f31..fdcde13b 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/CalculatorFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/CalculatorFragment.java @@ -83,10 +83,9 @@ public CalculatorFragment() { } @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); setHasOptionsMenu(true); - setRetainInstance(true); } @Override diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/ConverterFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/ConverterFragment.java index 7fe8e79a..5ba5a289 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/ConverterFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/ConverterFragment.java @@ -85,10 +85,9 @@ public ConverterFragment() { } @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); setHasOptionsMenu(true); - setRetainInstance(true); } @Override diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/FavoritesFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/FavoritesFragment.java index 1df3a9fb..0c3a608e 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/FavoritesFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/FavoritesFragment.java @@ -82,12 +82,6 @@ public FavoritesFragment() { // Required empty public constructor } - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setRetainInstance(true); - } - @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/RecentsFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/RecentsFragment.java index 5b406f97..3f7ce34d 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/RecentsFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/RecentsFragment.java @@ -107,12 +107,6 @@ public RecentsFragment() { //Required empty constructor } - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setRetainInstance(true); - } - @Override public void onAttach(Context context) { super.onAttach(context); @@ -217,7 +211,8 @@ public void onDrawerOpened() { * Fully expand the toolbar with animation. */ private void expandToolbar() { - AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) ((CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams()).getBehavior(); + AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) ((CoordinatorLayout.LayoutParams) + mAppBarLayout.getLayoutParams()).getBehavior(); behavior.onNestedFling(mCoordinatorLayout, mAppBarLayout, null, 0, -1000, true); } diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UnusualFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UnusualFragment.java index ce7620a8..ec89d9de 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UnusualFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UnusualFragment.java @@ -104,10 +104,9 @@ public UnusualFragment() { } @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); setHasOptionsMenu(true); - setRetainInstance(true); } @Override diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java index fe83cbbc..7e50bcb3 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java @@ -126,10 +126,9 @@ public static UserFragment newInstance(User user) { } @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); setHasOptionsMenu(true); - setRetainInstance(true); } /** From 8aa49342a22829ac033706e5aca0d5c741e002af Mon Sep 17 00:00:00 2001 From: Long Tran Date: Fri, 29 Apr 2016 13:40:19 +0200 Subject: [PATCH 09/18] retain refresh animation --- .../interactor/LoadAllPricesInteractor.java | 9 -- .../presenter/fragment/RecentsPresenter.java | 94 +++++++++---------- .../presenter/fragment/UserPresenter.java | 48 ++++++---- .../bktf/ui/fragment/RecentsFragment.java | 7 +- .../bktf/ui/view/fragment/RecentsView.java | 2 - 5 files changed, 71 insertions(+), 89 deletions(-) diff --git a/app/src/main/java/com/tlongdev/bktf/interactor/LoadAllPricesInteractor.java b/app/src/main/java/com/tlongdev/bktf/interactor/LoadAllPricesInteractor.java index 324c657b..e4118d52 100644 --- a/app/src/main/java/com/tlongdev/bktf/interactor/LoadAllPricesInteractor.java +++ b/app/src/main/java/com/tlongdev/bktf/interactor/LoadAllPricesInteractor.java @@ -85,16 +85,7 @@ protected void onPostExecute(Cursor cursor) { } } - @Override - protected void onCancelled(Cursor cursor) { - if (mCallback != null) { - mCallback.onLoadPricesFailed(); - } - } - public interface Callback { void onLoadPricesFinished(Cursor prices); - - void onLoadPricesFailed(); } } diff --git a/app/src/main/java/com/tlongdev/bktf/presenter/fragment/RecentsPresenter.java b/app/src/main/java/com/tlongdev/bktf/presenter/fragment/RecentsPresenter.java index 939626be..335988b2 100644 --- a/app/src/main/java/com/tlongdev/bktf/presenter/fragment/RecentsPresenter.java +++ b/app/src/main/java/com/tlongdev/bktf/presenter/fragment/RecentsPresenter.java @@ -41,7 +41,8 @@ * @author Long * @since 2016. 03. 10. */ -public class RecentsPresenter implements Presenter, LoadAllPricesInteractor.Callback, TlongdevPriceListInteractor.Callback, TlongdevItemSchemaInteractor.Callback, LoadCurrencyPricesInteractor.Callback { +public class RecentsPresenter implements Presenter, LoadAllPricesInteractor.Callback, + TlongdevPriceListInteractor.Callback, TlongdevItemSchemaInteractor.Callback, LoadCurrencyPricesInteractor.Callback { @Inject SharedPreferences mPrefs; @Inject SharedPreferences.Editor mEditor; @@ -51,6 +52,8 @@ public class RecentsPresenter implements Presenter, LoadAllPricesIn private RecentsView mView; private final BptfApplication mApplication; + private boolean mLoading = false; + public RecentsPresenter(BptfApplication application) { mApplication = application; application.getPresenterComponent().inject(this); @@ -59,6 +62,10 @@ public RecentsPresenter(BptfApplication application) { @Override public void attachView(RecentsView view) { mView = view; + + if (mView != null && mLoading) { + mView.showRefreshAnimation(); + } } @Override @@ -73,28 +80,13 @@ public void onLoadPricesFinished(Cursor prices) { } } - @Override - public void onLoadPricesFailed() { - if (mView != null) { - mView.showError(); - } - } - public void loadPrices() { //Download whole database when the app is first opened. if (mPrefs.getBoolean(mContext.getString(R.string.pref_initial_load_v2), true)) { if (Utility.isNetworkAvailable(mContext)) { - TlongdevPriceListInteractor task = new TlongdevPriceListInteractor(mApplication, false, true, this); - task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - + callTlongdevPrices(false, true); //Show the progress dialog mView.showLoadingDialog("Downloading prices..."); - - mTracker.send(new HitBuilders.EventBuilder() - .setCategory("Request") - .setAction("Refresh") - .setLabel("Prices") - .build()); } else { mView.showErrorDialog(); } @@ -105,16 +97,8 @@ public void loadPrices() { //Update database if the last update happened more than an hour ago if (System.currentTimeMillis() - mPrefs.getLong(mContext.getString(R.string.pref_last_price_list_update), 0) >= 3600000L && Utility.isNetworkAvailable(mContext)) { - TlongdevPriceListInteractor interactor1 = new TlongdevPriceListInteractor(mApplication, true, false, this); - interactor1.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - + callTlongdevPrices(true, false); mView.showRefreshAnimation(); - - mTracker.send(new HitBuilders.EventBuilder() - .setCategory("Request") - .setAction("Refresh") - .setLabel("Prices") - .build()); } } } @@ -122,20 +106,40 @@ public void loadPrices() { public void downloadPrices() { //Manual update if (Utility.isNetworkAvailable(mContext)) { - TlongdevPriceListInteractor interactor = new TlongdevPriceListInteractor(mApplication, true, true, this); - interactor.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - - mTracker.send(new HitBuilders.EventBuilder() - .setCategory("Request") - .setAction("Refresh") - .setLabel("Prices") - .build()); + callTlongdevPrices(true, true); } else { + mLoading = false; mView.showToast("bptf: " + mContext.getString(R.string.error_no_network), Toast.LENGTH_SHORT); mView.hideRefreshingAnimation(); } } + private void callTlongdevPrices(boolean updateDatabase, boolean manualSync) { + TlongdevPriceListInteractor interactor = new TlongdevPriceListInteractor( + mApplication, updateDatabase, manualSync, this + ); + interactor.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + + mLoading = true; + + mTracker.send(new HitBuilders.EventBuilder() + .setCategory("Request") + .setAction("Refresh") + .setLabel("Prices") + .build()); + } + + private void callTlongdevItemSchema() { + TlongdevItemSchemaInteractor task = new TlongdevItemSchemaInteractor(mApplication, this); + task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + + mTracker.send(new HitBuilders.EventBuilder() + .setCategory("Request") + .setAction("Refresh") + .setLabel("ItemSchema") + .build()); + } + public void loadCurrencyPrices() { LoadCurrencyPricesInteractor interactor = new LoadCurrencyPricesInteractor( mApplication, this @@ -154,19 +158,10 @@ public void onPriceListFinished(int newItems, long sinceParam) { } if (mPrefs.getBoolean(mContext.getString(R.string.pref_initial_load_v2), true)) { - - TlongdevItemSchemaInteractor task = new TlongdevItemSchemaInteractor(mApplication, this); - task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - + callTlongdevItemSchema(); if (mView != null) { mView.showLoadingDialog("Downloading item schema..."); } - - mTracker.send(new HitBuilders.EventBuilder() - .setCategory("Request") - .setAction("Refresh") - .setLabel("ItemSchema") - .build()); } else { if (newItems > 0) { loadPrices(); @@ -174,15 +169,9 @@ public void onPriceListFinished(int newItems, long sinceParam) { if (System.currentTimeMillis() - mPrefs.getLong(mContext.getString(R.string.pref_last_item_schema_update), 0) >= 172800000L //2days && Utility.isNetworkAvailable(mContext)) { - TlongdevItemSchemaInteractor task = new TlongdevItemSchemaInteractor(mApplication, this); - task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - - mTracker.send(new HitBuilders.EventBuilder() - .setCategory("Request") - .setAction("Refresh") - .setLabel("ItemSchema") - .build()); + callTlongdevItemSchema(); } else { + mLoading = false; if (mView != null) { mView.hideRefreshingAnimation(); loadCurrencyPrices(); @@ -217,6 +206,7 @@ public void onItemSchemaFinished() { mEditor.putBoolean(mContext.getString(R.string.pref_initial_load_v2), false); mEditor.apply(); + mLoading = false; if (mView != null) { //Stop animation mView.hideRefreshingAnimation(); diff --git a/app/src/main/java/com/tlongdev/bktf/presenter/fragment/UserPresenter.java b/app/src/main/java/com/tlongdev/bktf/presenter/fragment/UserPresenter.java index a97420df..a60d4a36 100644 --- a/app/src/main/java/com/tlongdev/bktf/presenter/fragment/UserPresenter.java +++ b/app/src/main/java/com/tlongdev/bktf/presenter/fragment/UserPresenter.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -40,7 +40,7 @@ * @author Long * @since 2016. 03. 15. */ -public class UserPresenter implements Presenter,GetUserDataInteractor.Callback, SwipeRefreshLayout.OnRefreshListener, Tf2UserBackpackInteractor.Callback { +public class UserPresenter implements Presenter, GetUserDataInteractor.Callback, SwipeRefreshLayout.OnRefreshListener, Tf2UserBackpackInteractor.Callback { @Inject SharedPreferences mPrefs; @Inject SharedPreferences.Editor mEditor; @@ -52,6 +52,8 @@ public class UserPresenter implements Presenter,GetUserDataInteractor. private final BptfApplication mApplication; private boolean mSearchedUser; + private boolean mLoading = false; + public UserPresenter(BptfApplication application) { mApplication = application; application.getPresenterComponent().inject(this); @@ -60,6 +62,10 @@ public UserPresenter(BptfApplication application) { @Override public void attachView(UserView view) { mView = view; + + if (mView != null && mLoading) { + mView.showRefreshingAnimation(); + } } @Override @@ -74,16 +80,8 @@ public void getUserDataIfNeeded() { - user.getLastUpdated() >= 3600000L) { //Start the task and listen for the end - GetUserDataInteractor task = new GetUserDataInteractor(mApplication, - mProfileManager.getUser(), false, this); - task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - + getUserData(false); mView.showRefreshingAnimation(); - - mTracker.send(new HitBuilders.EventBuilder() - .setCategory("Request") - .setAction("UserData") - .build()); } } @@ -102,24 +100,31 @@ public void onUserInfoFinished(User user) { @Override public void onUserInfoFailed(String errorMessage) { + mLoading = false; if (mView != null) { mView.hideRefreshingAnimation(); mView.showToast("bptf: " + errorMessage, Toast.LENGTH_SHORT); } } + private void getUserData(boolean isGuest) { + //Start fetching the data and listen for the end + GetUserDataInteractor interactor = new GetUserDataInteractor(mApplication, + mProfileManager.getUser(), isGuest, this); + interactor.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + + mLoading = true; + + mTracker.send(new HitBuilders.EventBuilder() + .setCategory("Request") + .setAction("UserData") + .build()); + } + @Override public void onRefresh() { if (Utility.isNetworkAvailable(mContext)) { - //Start fetching the data and listen for the end - GetUserDataInteractor interactor = new GetUserDataInteractor(mApplication, - mProfileManager.getUser(), true, this); - interactor.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - - mTracker.send(new HitBuilders.EventBuilder() - .setCategory("Request") - .setAction("UserData") - .build()); + getUserData(true); } else { //There is no internet connection, notify the user mView.showToast("bptf: " + mContext.getString(R.string.error_no_network), Toast.LENGTH_SHORT); @@ -129,6 +134,7 @@ public void onRefresh() { @Override public void onUserBackpackFinished(User user) { + mLoading = false; if (mView != null) { mView.backpack(false); mView.updateUserPage(mProfileManager.getUser()); @@ -146,6 +152,7 @@ public void onPrivateBackpack() { user.setRawMetal(-1); mProfileManager.saveUser(user); + mLoading = false; if (mView != null) { mView.backpack(true); mView.updateUserPage(user); @@ -156,6 +163,7 @@ public void onPrivateBackpack() { @Override public void onUserBackpackFailed(String errorMessage) { //Stop the refreshing animation and update the UI + mLoading = false; if (mView != null) { mView.updateUserPage(mProfileManager.getUser()); mView.hideRefreshingAnimation(); diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/RecentsFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/RecentsFragment.java index 3f7ce34d..d43abe6d 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/RecentsFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/RecentsFragment.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -236,11 +236,6 @@ public void showPrices(Cursor prices) { } } - @Override - public void showError() { - mAdapter.swapCursor(null); - } - @Override public void showRefreshAnimation() { //Workaround for the circle not appearing diff --git a/app/src/main/java/com/tlongdev/bktf/ui/view/fragment/RecentsView.java b/app/src/main/java/com/tlongdev/bktf/ui/view/fragment/RecentsView.java index 01e2cf35..3c87a39f 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/view/fragment/RecentsView.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/view/fragment/RecentsView.java @@ -28,8 +28,6 @@ public interface RecentsView extends BaseView { void showPrices(Cursor prices); - void showError(); - void showRefreshAnimation(); void hideRefreshingAnimation(); From afa61829ac36e7fa8f9a3e78c5d9bf6812f95b1b Mon Sep 17 00:00:00 2001 From: Long Tran Date: Fri, 29 Apr 2016 13:46:14 +0200 Subject: [PATCH 10/18] fixed strangifier name --- app/src/main/java/com/tlongdev/bktf/model/Item.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/tlongdev/bktf/model/Item.java b/app/src/main/java/com/tlongdev/bktf/model/Item.java index ed91fa8c..952cede1 100644 --- a/app/src/main/java/com/tlongdev/bktf/model/Item.java +++ b/app/src/main/java/com/tlongdev/bktf/model/Item.java @@ -205,7 +205,7 @@ public String getFormattedName(Context context, boolean isProper) { DatabaseContract.ItemSchemaEntry.CONTENT_URI, new String[]{ItemSchemaEntry.COLUMN_ITEM_NAME, ItemSchemaEntry.COLUMN_TYPE_NAME, ItemSchemaEntry.COLUMN_PROPER_NAME}, ItemSchemaEntry.TABLE_NAME + "." + ItemSchemaEntry.COLUMN_DEFINDEX + " = ?", - new String[]{String.valueOf(defindex)}, + new String[]{String.valueOf(priceIndex)}, null ); From 401d89de6d47db65ae24eddfed243c838986c38e Mon Sep 17 00:00:00 2001 From: Long Tran Date: Sun, 1 May 2016 11:22:52 +0200 Subject: [PATCH 11/18] license stuff --- README.md | 2 ++ app/build.gradle | 3 +-- .../java/com/tlongdev/bktf/ads/AdManager.java | 18 +++++++++++++++++- .../bktf/component/DrawerManagerComponent.java | 16 ++++++++++++++++ .../bktf/component/ServiceComponent.java | 16 ++++++++++++++++ .../interactor/LoadAllPricesInteractor.java | 1 - .../LoadBackpackItemsInteractor.java | 16 ++++++++++++++++ .../bktf/presenter/activity/UserPresenter.java | 16 ++++++++++++++++ .../bktf/ui/NavigationDrawerManager.java | 16 ++++++++++++++++ .../bktf/ui/activity/AboutActivity.java | 2 +- .../bktf/ui/activity/SettingsActivity.java | 2 +- .../bktf/ui/view/AppearAdListener.java | 16 ++++++++++++++++ .../bktf/ui/view/fragment/UserView.java | 16 ++++++++++++++++ 13 files changed, 134 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 10014ba0..1c9240a7 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,9 @@ The unofficial backpack.tf mobile application Fork this repository and contribute by creating a pull request. Notable contributions will be credited in the application. See the [contributing guidelines](https://github.com/Longi94/bptf/blob/master/CONTRIBUTING.md) before contributing. ### 3rd party libraries +- [Answers](https://fabric.io/kits/android/answers) - [Butter Knife](http://jakewharton.github.io/butterknife/) +- [Crashlytics](https://try.crashlytics.com/) - [Dagger 2](http://google.github.io/dagger/) - [Dart 2](https://github.com/f2prateek/dart) - [Glide](https://github.com/bumptech/glide) diff --git a/app/build.gradle b/app/build.gradle index 11e987d5..0ae7640e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -85,13 +85,12 @@ dependencies { compile 'com.google.dagger:dagger:2.0.2' compile 'com.github.PhilJay:MPAndroidChart:v2.2.3' compile 'com.github.bumptech.glide:glide:3.7.0' - compile 'com.jakewharton:butterknife:8.0.0' + compile 'com.jakewharton:butterknife:8.0.1' compile('com.squareup.okhttp3:okhttp:3.2.0') { exclude group: 'com.squareup.okio', module: 'okio' } compile 'com.squareup.retrofit2:retrofit:2.0.2' compile 'com.squareup.retrofit2:converter-gson:2.0.2' - compile 'com.google.android.gms:play-services-appindexing:8.4.0' } apply plugin: 'com.google.gms.google-services' \ No newline at end of file diff --git a/app/src/main/java/com/tlongdev/bktf/ads/AdManager.java b/app/src/main/java/com/tlongdev/bktf/ads/AdManager.java index 82fb115a..a440980c 100644 --- a/app/src/main/java/com/tlongdev/bktf/ads/AdManager.java +++ b/app/src/main/java/com/tlongdev/bktf/ads/AdManager.java @@ -1,3 +1,19 @@ +/** + * Copyright 2016 Long Tran + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.tlongdev.bktf.ads; import android.content.Context; @@ -47,7 +63,7 @@ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, Strin for (AdView adView : mAdViews) { adView.setVisibility(mAdsEnabled ? View.VISIBLE : View.GONE); - if (mAdsEnabled && !((AppearAdListener)adView.getAdListener()).isLoaded()) { + if (mAdsEnabled && !((AppearAdListener) adView.getAdListener()).isLoaded()) { adView.loadAd(new AdRequest.Builder().build()); } } diff --git a/app/src/main/java/com/tlongdev/bktf/component/DrawerManagerComponent.java b/app/src/main/java/com/tlongdev/bktf/component/DrawerManagerComponent.java index 40dfbf9b..dbc753ce 100644 --- a/app/src/main/java/com/tlongdev/bktf/component/DrawerManagerComponent.java +++ b/app/src/main/java/com/tlongdev/bktf/component/DrawerManagerComponent.java @@ -1,3 +1,19 @@ +/** + * Copyright 2016 Long Tran + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.tlongdev.bktf.component; import com.tlongdev.bktf.module.BptfAppModule; diff --git a/app/src/main/java/com/tlongdev/bktf/component/ServiceComponent.java b/app/src/main/java/com/tlongdev/bktf/component/ServiceComponent.java index c4130708..dea6ba40 100644 --- a/app/src/main/java/com/tlongdev/bktf/component/ServiceComponent.java +++ b/app/src/main/java/com/tlongdev/bktf/component/ServiceComponent.java @@ -1,3 +1,19 @@ +/** + * Copyright 2016 Long Tran + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.tlongdev.bktf.component; import com.tlongdev.bktf.gcm.GcmMessageHandler; diff --git a/app/src/main/java/com/tlongdev/bktf/interactor/LoadAllPricesInteractor.java b/app/src/main/java/com/tlongdev/bktf/interactor/LoadAllPricesInteractor.java index e4118d52..74832bfe 100644 --- a/app/src/main/java/com/tlongdev/bktf/interactor/LoadAllPricesInteractor.java +++ b/app/src/main/java/com/tlongdev/bktf/interactor/LoadAllPricesInteractor.java @@ -14,7 +14,6 @@ * limitations under the License. */ - package com.tlongdev.bktf.interactor; import android.content.Context; diff --git a/app/src/main/java/com/tlongdev/bktf/interactor/LoadBackpackItemsInteractor.java b/app/src/main/java/com/tlongdev/bktf/interactor/LoadBackpackItemsInteractor.java index ab843468..090edd9f 100644 --- a/app/src/main/java/com/tlongdev/bktf/interactor/LoadBackpackItemsInteractor.java +++ b/app/src/main/java/com/tlongdev/bktf/interactor/LoadBackpackItemsInteractor.java @@ -1,3 +1,19 @@ +/** + * Copyright 2016 Long Tran + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.tlongdev.bktf.interactor; import android.content.ContentResolver; diff --git a/app/src/main/java/com/tlongdev/bktf/presenter/activity/UserPresenter.java b/app/src/main/java/com/tlongdev/bktf/presenter/activity/UserPresenter.java index 641c0899..3b45d01b 100644 --- a/app/src/main/java/com/tlongdev/bktf/presenter/activity/UserPresenter.java +++ b/app/src/main/java/com/tlongdev/bktf/presenter/activity/UserPresenter.java @@ -1,3 +1,19 @@ +/** + * Copyright 2016 Long Tran + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.tlongdev.bktf.presenter.activity; import android.os.AsyncTask; diff --git a/app/src/main/java/com/tlongdev/bktf/ui/NavigationDrawerManager.java b/app/src/main/java/com/tlongdev/bktf/ui/NavigationDrawerManager.java index 2fb67513..78b9b467 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/NavigationDrawerManager.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/NavigationDrawerManager.java @@ -1,3 +1,19 @@ +/** + * Copyright 2016 Long Tran + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.tlongdev.bktf.ui; import android.content.Context; diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/AboutActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/AboutActivity.java index 6bc3708d..76f19f7a 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/AboutActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/AboutActivity.java @@ -39,7 +39,7 @@ * handset devices, settings are presented as a single list. On tablets, * settings are split by category, with category headers shown to the left of * the list of settings. - *

+ * * See * Android Design: Settings for design guidelines and the Settings diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/SettingsActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/SettingsActivity.java index 37727455..c26536b9 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/SettingsActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/SettingsActivity.java @@ -40,7 +40,7 @@ * handset devices, settings are presented as a single list. On tablets, * settings are split by category, with category headers shown to the left of * the list of settings. - *

+ * * See * Android Design: Settings for design guidelines and the Settings diff --git a/app/src/main/java/com/tlongdev/bktf/ui/view/AppearAdListener.java b/app/src/main/java/com/tlongdev/bktf/ui/view/AppearAdListener.java index fe52093f..7a96ac04 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/view/AppearAdListener.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/view/AppearAdListener.java @@ -1,3 +1,19 @@ +/** + * Copyright 2016 Long Tran + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.tlongdev.bktf.ui.view; import android.view.View; diff --git a/app/src/main/java/com/tlongdev/bktf/ui/view/fragment/UserView.java b/app/src/main/java/com/tlongdev/bktf/ui/view/fragment/UserView.java index 53192820..d30e3837 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/view/fragment/UserView.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/view/fragment/UserView.java @@ -1,3 +1,19 @@ +/** + * Copyright 2016 Long Tran + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.tlongdev.bktf.ui.view.fragment; import com.tlongdev.bktf.model.User; From 4e49118e1b12baaef5b92445cfe68cf9ae6053fc Mon Sep 17 00:00:00 2001 From: Long Tran Date: Sun, 1 May 2016 11:29:08 +0200 Subject: [PATCH 12/18] fixed some typos --- CONTRIBUTING.md | 2 +- .../bktf/customtabs/CustomTabActivityHelper.java | 6 +++--- .../tlongdev/bktf/customtabs/CustomTabsHelper.java | 2 +- .../interactor/GetSearchedUserDataInteractor.java | 2 +- .../bktf/interactor/GetUserDataInteractor.java | 2 +- .../bktf/interactor/Tf2UserBackpackInteractor.java | 2 +- .../main/java/com/tlongdev/bktf/model/User.java | 14 +++++++------- .../tlongdev/bktf/ui/activity/MainActivity.java | 2 +- .../bktf/ui/activity/SettingsActivity.java | 2 +- .../tlongdev/bktf/ui/fragment/UserFragment.java | 2 +- 10 files changed, 18 insertions(+), 18 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2a593e27..6ab2cc0d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -19,7 +19,7 @@ STEAM_WEB_API_KEY=DUMMY_KEY - You need a steam web API key (http://steamcommunity.com/dev/apikey) in order to be able to download steam user data. ## Technologies -It would be really if you were somewhat familiar with the technologies and concepts. If not, I provided some userful links for you. +It would be really if you were somewhat familiar with the technologies and concepts. If not, I provided some useful links for you. - Dependency using dagger 2 - https://guides.codepath.com/android/Dependency-Injection-with-Dagger-2 - Model-View-Presenter design pattern diff --git a/app/src/main/java/com/tlongdev/bktf/customtabs/CustomTabActivityHelper.java b/app/src/main/java/com/tlongdev/bktf/customtabs/CustomTabActivityHelper.java index a40cc7f7..29248d78 100644 --- a/app/src/main/java/com/tlongdev/bktf/customtabs/CustomTabActivityHelper.java +++ b/app/src/main/java/com/tlongdev/bktf/customtabs/CustomTabActivityHelper.java @@ -25,7 +25,7 @@ public class CustomTabActivityHelper implements ServiceConnectionCallback { private ConnectionCallback mConnectionCallback; /** - * Opens the URL on a Custom Tab if possible. Otherwise fallsback to opening it on a WebView. + * Opens the URL on a Custom Tab if possible. Otherwise falls back to opening it on a WebView. * * @param activity The host activity. * @param customTabsIntent a CustomTabsIntent to be used if Custom Tabs is available. @@ -38,7 +38,7 @@ public static void openCustomTab(Activity activity, CustomTabFallback fallback) { String packageName = CustomTabsHelper.getPackageNameToUse(activity); - //If we cant find a package name, it means theres no browser that supports + //If we cant find a package name, it means there's no browser that supports //Chrome Custom Tabs installed. So, we fallback to the webview if (packageName == null || Build.VERSION.SDK_INT < 15) { if (fallback != null) { @@ -88,7 +88,7 @@ public void setConnectionCallback(ConnectionCallback connectionCallback) { /** * Binds the Activity to the Custom Tabs Service. - * @param activity the activity to be binded to the service. + * @param activity the activity to be bound to the service. */ public void bindCustomTabsService(Activity activity) { if (mClient != null) return; diff --git a/app/src/main/java/com/tlongdev/bktf/customtabs/CustomTabsHelper.java b/app/src/main/java/com/tlongdev/bktf/customtabs/CustomTabsHelper.java index b852923e..624d3b55 100644 --- a/app/src/main/java/com/tlongdev/bktf/customtabs/CustomTabsHelper.java +++ b/app/src/main/java/com/tlongdev/bktf/customtabs/CustomTabsHelper.java @@ -37,7 +37,7 @@ public static void addKeepAliveExtra(Context context, Intent intent) { } /** - * Goes through all apps that handle VIEW intents and have a warmup service. Picks + * Goes through all apps that handle VIEW intents and have a warm up service. Picks * the one chosen by the user if there is one, otherwise makes a best effort to return a * valid package name. * diff --git a/app/src/main/java/com/tlongdev/bktf/interactor/GetSearchedUserDataInteractor.java b/app/src/main/java/com/tlongdev/bktf/interactor/GetSearchedUserDataInteractor.java index 1758b5f0..b5fd09fc 100644 --- a/app/src/main/java/com/tlongdev/bktf/interactor/GetSearchedUserDataInteractor.java +++ b/app/src/main/java/com/tlongdev/bktf/interactor/GetSearchedUserDataInteractor.java @@ -204,7 +204,7 @@ private void saveUserData(BackpackTfPayload payload) { mUser.setVacBanned(player.getBanVac()); if (player.getBackpackTfTrust() != null) { - mUser.setTrustNegatvie(player.getBackpackTfTrust().getAgainst()); + mUser.setTrustNegative(player.getBackpackTfTrust().getAgainst()); mUser.setTrustPositive(player.getBackpackTfTrust().getFor()); } } diff --git a/app/src/main/java/com/tlongdev/bktf/interactor/GetUserDataInteractor.java b/app/src/main/java/com/tlongdev/bktf/interactor/GetUserDataInteractor.java index d591a6a0..59d39152 100644 --- a/app/src/main/java/com/tlongdev/bktf/interactor/GetUserDataInteractor.java +++ b/app/src/main/java/com/tlongdev/bktf/interactor/GetUserDataInteractor.java @@ -230,7 +230,7 @@ private void saveUserData(BackpackTfPayload payload) { mUser.setVacBanned(player.getBanVac()); if (player.getBackpackTfTrust() != null) { - mUser.setTrustNegatvie(player.getBackpackTfTrust().getAgainst()); + mUser.setTrustNegative(player.getBackpackTfTrust().getAgainst()); mUser.setTrustPositive(player.getBackpackTfTrust().getFor()); } } diff --git a/app/src/main/java/com/tlongdev/bktf/interactor/Tf2UserBackpackInteractor.java b/app/src/main/java/com/tlongdev/bktf/interactor/Tf2UserBackpackInteractor.java index a8630610..055db7a8 100644 --- a/app/src/main/java/com/tlongdev/bktf/interactor/Tf2UserBackpackInteractor.java +++ b/app/src/main/java/com/tlongdev/bktf/interactor/Tf2UserBackpackInteractor.java @@ -159,7 +159,7 @@ private int saveItems(PlayerItemsPayload payload) { ContentValues[] cvArray = new ContentValues[cVVector.size()]; cVVector.toArray(cvArray); - //Content uri based on which talbe to insert into + //Content uri based on which table to insert into Uri contentUri; if (!mIsGuest) { contentUri = UserBackpackEntry.CONTENT_URI; diff --git a/app/src/main/java/com/tlongdev/bktf/model/User.java b/app/src/main/java/com/tlongdev/bktf/model/User.java index 2c53008b..97e20fb1 100644 --- a/app/src/main/java/com/tlongdev/bktf/model/User.java +++ b/app/src/main/java/com/tlongdev/bktf/model/User.java @@ -59,7 +59,7 @@ public class User implements Parcelable { private int trustPositive; - private int trustNegatvie; + private int trustNegative; private int rawKeys; @@ -101,7 +101,7 @@ public User(Parcel source) { backpackValue = source.readDouble(); lastUpdated = source.readLong(); trustPositive = source.readInt(); - trustNegatvie = source.readInt(); + trustNegative = source.readInt(); rawKeys = source.readInt(); rawMetal = source.readDouble(); backpackSlots = source.readInt(); @@ -132,7 +132,7 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeDouble(backpackValue); dest.writeLong(lastUpdated); dest.writeInt(trustPositive); - dest.writeInt(trustNegatvie); + dest.writeInt(trustNegative); dest.writeInt(rawKeys); dest.writeDouble(rawMetal); dest.writeInt(backpackSlots); @@ -259,12 +259,12 @@ public void setTrustPositive(int trustPositive) { this.trustPositive = trustPositive; } - public int getTrustNegatvie() { - return trustNegatvie; + public int getTrustNegative() { + return trustNegative; } - public void setTrustNegatvie(int trustNegatvie) { - this.trustNegatvie = trustNegatvie; + public void setTrustNegative(int trustNegative) { + this.trustNegative = trustNegative; } public int getRawKeys() { diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/MainActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/MainActivity.java index ba765880..cf833875 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/MainActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/MainActivity.java @@ -227,7 +227,7 @@ public boolean onOptionsItemSelected(MenuItem item) { @Override public void setSupportActionBar(Toolbar toolbar) { super.setSupportActionBar(toolbar); - //Since each fragment has it's own toolbar we need to re add the drawer toggle everytime we + //Since each fragment has it's own toolbar we need to re add the drawer toggle every time we //switch fragments restoreNavigationIcon(); } diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/SettingsActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/SettingsActivity.java index c26536b9..19ce75f4 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/SettingsActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/SettingsActivity.java @@ -206,7 +206,7 @@ public boolean onPreferenceClick(Preference preference) { */ @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - //Start the appropiate services if these settings have been changed + //Start the appropriate services if these settings have been changed } @Override diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java index 7e50bcb3..23fbcbf1 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java @@ -389,7 +389,7 @@ public void updateUserPage(User user) { //Set the trust score and color the background according to it. trustPositive.setText(String.format(Locale.ENGLISH, "+%d", mUser.getTrustPositive())); - trustNegative.setText(String.format(Locale.ENGLISH, "-%d", mUser.getTrustNegatvie())); + trustNegative.setText(String.format(Locale.ENGLISH, "-%d", mUser.getTrustNegative())); //Raw keys int rawKeys = mUser.getRawKeys(); From 8d5b44625027320f680344f53999d427ea1e5734 Mon Sep 17 00:00:00 2001 From: Long Tran Date: Sun, 1 May 2016 11:40:12 +0200 Subject: [PATCH 13/18] fixed a few lint warnings --- .../main/java/com/tlongdev/bktf/ui/activity/MainActivity.java | 2 +- app/src/main/res/layout/activity_user.xml | 4 ++-- app/src/main/res/layout/favorites_widget.xml | 1 - 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/tlongdev/bktf/ui/activity/MainActivity.java b/app/src/main/java/com/tlongdev/bktf/ui/activity/MainActivity.java index cf833875..0b0d51cf 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/activity/MainActivity.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/activity/MainActivity.java @@ -338,7 +338,7 @@ public void run() { } }); - mDrawerLayout.setDrawerListener(mDrawerToggle); + mDrawerLayout.addDrawerListener(mDrawerToggle); } /** diff --git a/app/src/main/res/layout/activity_user.xml b/app/src/main/res/layout/activity_user.xml index 606dec25..912e3eff 100644 --- a/app/src/main/res/layout/activity_user.xml +++ b/app/src/main/res/layout/activity_user.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/favorites_widget.xml b/app/src/main/res/layout/favorites_widget.xml index 158d8be5..bb491eb7 100644 --- a/app/src/main/res/layout/favorites_widget.xml +++ b/app/src/main/res/layout/favorites_widget.xml @@ -2,7 +2,6 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/card_color" android:padding="@dimen/widget_margin"> Date: Sun, 1 May 2016 11:47:54 +0200 Subject: [PATCH 14/18] fixed private backpack --- .../bktf/interactor/Tf2UserBackpackInteractor.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/tlongdev/bktf/interactor/Tf2UserBackpackInteractor.java b/app/src/main/java/com/tlongdev/bktf/interactor/Tf2UserBackpackInteractor.java index 055db7a8..51adea2b 100644 --- a/app/src/main/java/com/tlongdev/bktf/interactor/Tf2UserBackpackInteractor.java +++ b/app/src/main/java/com/tlongdev/bktf/interactor/Tf2UserBackpackInteractor.java @@ -116,11 +116,11 @@ protected Integer doInBackground(Void... params) { protected void onPostExecute(Integer integer) { if (mCallback != null) { if (integer == 0) { - //Notify the listener that the backpack was private - mCallback.onPrivateBackpack(); - } else if (integer >= 1) { //Notify the user that the fetching finished and pass on the data mCallback.onUserBackpackFinished(mUser); + } else if (integer >= 1) { + //Notify the listener that the backpack was private + mCallback.onPrivateBackpack(); } else { mCallback.onUserBackpackFailed(errorMessage); } @@ -187,12 +187,12 @@ private int saveItems(PlayerItemsPayload payload) { mProfileManager.saveUser(mUser); } } - return 1; + return 0; case 8: //Invalid ID, shouldn't reach throw new IllegalStateException( "Steam ID provided for backpack fetching was invalid: " + mUser.getResolvedSteamId()); case 15: //Backpack is private - return 2; + return 1; case 18: //ID doesn't exist, shouldn't reach throw new IllegalStateException( "Steam ID provided for backpack fetching doesn't exist: " + mUser.getResolvedSteamId()); From 5ff07d88e0d1b5ca18418c8ae10af4fd84713a02 Mon Sep 17 00:00:00 2001 From: Long Tran Date: Sun, 1 May 2016 12:30:58 +0200 Subject: [PATCH 15/18] private backpack text --- .../bktf/ui/fragment/UserFragment.java | 104 ++++---- .../res/layout-v21/content_user_backpack.xml | 246 ++++++++++-------- .../main/res/layout/content_user_backpack.xml | 236 +++++++++-------- 3 files changed, 325 insertions(+), 261 deletions(-) diff --git a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java index 23fbcbf1..531e05cc 100644 --- a/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java +++ b/app/src/main/java/com/tlongdev/bktf/ui/fragment/UserFragment.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -97,6 +97,9 @@ public class UserFragment extends BptfFragment implements UserView, View.OnClick @BindView(R.id.coordinator_layout) CoordinatorLayout mCoordinatorLayout; @BindView(R.id.collapsing_toolbar) CollapsingToolbarLayout mCollapsingToolbarLayout; @BindView(R.id.ad_view) AdView mAdView; + @BindView(R.id.private_text) TextView mPrivateBackpackText; + @BindView(R.id.backpack) ImageView mBackpackButton; + @BindView(R.id.backpack_content) View mBackpackContent; //Stores whether the backpack is private or not private boolean privateBackpack = false; @@ -209,61 +212,53 @@ public boolean onOptionsItemSelected(MenuItem item) { } @OnClick({R.id.button_bazaar_tf, R.id.button_steamrep, R.id.button_tf2op, R.id.button_tf2tp, - R.id.button_steam_community, R.id.backpack}) + R.id.button_steam_community}) public void onClick(View v) { //Handle all the buttons here //Get the steam id, do nothing if there is no steam id String steamId = mUser.getResolvedSteamId(); if (steamId.equals("")) { - showToast( "bptf: " + getString(R.string.error_no_steam_id), Toast.LENGTH_SHORT); + showToast("bptf: " + getString(R.string.error_no_steam_id), Toast.LENGTH_SHORT); return; } - //All buttons (except the backpack one) open a link in the browser - if (v.getId() != R.id.backpack) { - - String url; - switch (v.getId()) { - case R.id.button_bazaar_tf: - url = getString(R.string.link_bazaar_tf); - break; - case R.id.button_steamrep: - url = getString(R.string.link_steamrep); - break; - case R.id.button_tf2op: - url = getString(R.string.link_tf2op); - break; - case R.id.button_tf2tp: - url = getString(R.string.link_tf2tp); - break; - case R.id.button_steam_community: - url = getString(R.string.link_steam_community); - break; - default: - return; - } + String url; + switch (v.getId()) { + case R.id.button_bazaar_tf: + url = getString(R.string.link_bazaar_tf); + break; + case R.id.button_steamrep: + url = getString(R.string.link_steamrep); + break; + case R.id.button_tf2op: + url = getString(R.string.link_tf2op); + break; + case R.id.button_tf2tp: + url = getString(R.string.link_tf2tp); + break; + case R.id.button_steam_community: + url = getString(R.string.link_steam_community); + break; + default: + return; + } - //Create an URI for the intent. - Uri webPage = Uri.parse(url + steamId); + //Create an URI for the intent. + Uri webPage = Uri.parse(url + steamId); - //Open link in the device default web browser - CustomTabsIntent intent = new CustomTabsIntent.Builder().build(); - CustomTabActivityHelper.openCustomTab(getActivity(), intent, webPage, - new WebViewFallback()); - } else { - if (privateBackpack) { - //The backpack is private, do nothing - showToast(getString(R.string.message_private_backpack_own), Toast.LENGTH_SHORT); - } else { - //Else the user clicked on the backpack button. Start the backpack activity. Pass - //the steamId and whether it's the user's backpack or not - Intent i = new Intent(getActivity(), UserBackpackActivity.class); - i.putExtra(UserBackpackActivity.EXTRA_NAME, mCollapsingToolbarLayout.getTitle()); - i.putExtra(UserBackpackActivity.EXTRA_GUEST, searchedUser); - startActivity(i); - } - } + //Open link in the device default web browser + CustomTabsIntent intent = new CustomTabsIntent.Builder().build(); + CustomTabActivityHelper.openCustomTab(getActivity(), intent, webPage, + new WebViewFallback()); + } + + @OnClick(R.id.backpack) + public void onBackpackClick() { + Intent i = new Intent(getActivity(), UserBackpackActivity.class); + i.putExtra(UserBackpackActivity.EXTRA_NAME, mCollapsingToolbarLayout.getTitle()); + i.putExtra(UserBackpackActivity.EXTRA_GUEST, searchedUser); + startActivity(i); } @Override @@ -374,11 +369,14 @@ public void updateUserPage(User user) { //Backpack value double bpValue = mUser.getBackpackValue(); + + backpack(privateBackpack); + if (bpValue == -1) { //Value is unknown (probably private) backpackValueRefined.setText("?"); backpackValueUsd.setText("?"); - } else if (!privateBackpack) { + } else { //Properly format the backpack value (is int, does it have a fraction smaller than 0.01) backpackValueRefined.setText(String.valueOf(Math.round(bpValue))); @@ -445,5 +443,19 @@ public void hideRefreshingAnimation() { @Override public void backpack(boolean _private) { privateBackpack = _private; + + if (mPrivateBackpackText != null) { + if (_private) { + mPrivateBackpackText.setVisibility(View.VISIBLE); + mBackpackButton.setEnabled(false); + mBackpackButton.setVisibility(View.GONE); + mBackpackContent.setVisibility(View.GONE); + } else { + mPrivateBackpackText.setVisibility(View.GONE); + mBackpackButton.setEnabled(true); + mBackpackButton.setVisibility(View.VISIBLE); + mBackpackContent.setVisibility(View.VISIBLE); + } + } } } \ No newline at end of file diff --git a/app/src/main/res/layout-v21/content_user_backpack.xml b/app/src/main/res/layout-v21/content_user_backpack.xml index d9154ffe..b5ff3d17 100644 --- a/app/src/main/res/layout-v21/content_user_backpack.xml +++ b/app/src/main/res/layout-v21/content_user_backpack.xml @@ -1,10 +1,10 @@ @@ -20,7 +20,7 @@ android:layout_weight="1" android:text="Backpack" android:textColor="@color/accent" - android:textSize="16sp" /> + android:textSize="16sp"/> @@ -37,136 +37,162 @@ + android:background="@color/separator_color"/> - - - - - + android:layout_height="wrap_content"> - - - - - - - - - - - - - - - + android:layout_gravity="center" + android:padding="16dp" + android:text="PRIVATE BACKPACK" + android:textColor="@color/text_primary" + android:textSize="24sp" + android:visibility="gone"/> + android:orientation="vertical"> - - - + + + + + + + + + + + + + + + + + + + + - - - - + android:baselineAligned="false" + android:orientation="horizontal"> + + + + + + + + + + + + + + + + + + + android:textSize="32sp"/> + android:layout_marginBottom="16dp" + android:text="@string/user_page_slots"/> - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/content_user_backpack.xml b/app/src/main/res/layout/content_user_backpack.xml index cd27482f..e7fb50a9 100644 --- a/app/src/main/res/layout/content_user_backpack.xml +++ b/app/src/main/res/layout/content_user_backpack.xml @@ -39,134 +39,160 @@ android:layout_height="1dp" android:background="@color/separator_color"/> - - - - - - - + android:layout_height="wrap_content"> - - - - - - - - - - - - - + android:layout_gravity="center" + android:padding="16dp" + android:text="PRIVATE BACKPACK" + android:textColor="@color/text_primary" + android:textSize="24sp" + android:visibility="gone"/> + android:orientation="vertical"> - - - + + + + + + + + + + + + + + + + + + + + - - - - + android:baselineAligned="false" + android:orientation="horizontal"> + + + + + + + + + + + + + + + + + + + android:layout_marginBottom="16dp" + android:text="@string/user_page_slots"/> - - - - - + \ No newline at end of file From 89f6814f906e9faa19c1a3d44f0d4e08cec5cddf Mon Sep 17 00:00:00 2001 From: Long Tran Date: Sun, 1 May 2016 16:46:55 +0200 Subject: [PATCH 16/18] shrinked some pngs --- .../favorites_appwidget_preview.png | Bin 56279 -> 21784 bytes app/src/main/res/drawable/hat.png | Bin 21414 -> 9671 bytes app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3579 -> 2670 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2298 -> 2104 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 5177 -> 3431 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 8000 -> 4775 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 11515 -> 6497 bytes 7 files changed, 0 insertions(+), 0 deletions(-) diff --git a/app/src/main/res/drawable-nodpi/favorites_appwidget_preview.png b/app/src/main/res/drawable-nodpi/favorites_appwidget_preview.png index e4c8be004148e31fb46883c4ee2b94be856a4bd9..798a7a64f5731e87ae1aa72ca4482d803e21ec3f 100644 GIT binary patch literal 21784 zcmc%x1yI{jxG#$0P@LjUfuaS9J0!&^F2$YVPH=|;#S0WGmO}9YrFbY%ptuEhx8P8M z1-t3lXV2O9&e?b7y?f`q%w*QgKP%t&TlTHrCrO-^h7tiT4K4}_3W18UybcNq8Vvbn z#z99uslFcdKsFfmKy@GrN?i)xy%i=33Ob6Gnx4X+o^Q3a=|CWVUantiTEs@*tKEJY z8*6oHO6;%T==G_jlf#MWKhByO5|Lgne*LhGiO{dAs)`C$@^m){2yzMWpu3o@ z$?L9q9Yb~c&E3tPnV8Yh&XDh*yl8w29a1-Q>d_WyEd|o9hOqoJ4!D@=iT+0uiptZR=Ru0Z*BY2gSl?8=` zzq)rzGxV0*aM?LHcDix8$`}?~&_g0W$m=(Emh<`8^CpD?{5}ka#Et#};{(O1rW(oW zS~sHorKhH*2FDHpUHBdSdK=odCh9QL@@9%s6b_EAE#13SO(4nu`p;2Pa>}X$0|R4I z$DaQF+`POAK_Y2U3UQw&H+SF_pOpY|@(PLy<>lpiM#h)p=*Upf`;zb${7KW!-Yz>S`927N+KAb#--RWo6RR(jVhKDk&?itggT> z?{xL`uCA^O%`BXpog5q-a&mGYZEb)zz_j!A zw6t_|bZBd9KOtXpD6-m(;^N}vPkAjUC`>3S@<2WR#p8TzfUd#a)7sPN^@+t=lkchP zjKqNheRZ*MRihJqbyKae-%RE7ySFQ|M#SIA$+4XqZg{ZYIs7)7)a35EYqWKIp(`{~D=ehJ`r&_EzB#gh`H-y$DDszk3e15kU%gn)i4R zJ<)0zHEas|C+1=1(U2L2BY~V?CJcwP!s*KFJ8K=^>t_%DZH&K zH;gGdkf%nfDWWFyp^T9Lr^tAo;E1lRCTZnKdB{zNudtLsCqs1EcC~WutX8f0@pTYM zqg;Y)>NP_&c3WqsM(0*@)RDb7Vg^e>wQYmD;O*tXX(u_qYp4&IXM+_q<#GCVj#8yq zX}wy%a#yXzVY71n%oLq(=$3|@>y7s53fa5Pr+`n2Ky@=Az3H}yz*|x8dP605FLMq= zS0ag9ECnaT@9B1w;l%!H8g324R*cl*e`0Z)3AjuVT#WaBoCd)AW^jhJ}`)m~JK~?lp zd99^?-9tf^Iko8-f`4l}+`$yt~U@P_to7CEG}T2`VG0vrIOtxVu98c#$=G>ikJ)kp0rKe#;g1e zW16bvgZYNKP=lOJYyq8P9UU6iQ)k?FY^7uT=%Q{!Z?A?35O!$qCBeD{NemFVbkW)Dzrd>5l{!CIo?Rc_zUYb4FY0 z->)C4+=2r>3!u+k5+Ho?pX!qzTf~?e#i5-YHL;DegY7l3(ApSs!=Ifc#!nF@58#fs zXWZi`V`#6!L~*mBlrriVh74f8UBUZ>Y;K3~i6NYwNmoy&W`$nz)=p z>Za=Y{VmVp3p(p31`3OgfAfF%nE()_sHd@?Qe>9a+5faD8n_%<;yxKVS#NIm>+PZ7DcD>LO^0Yr|eM>$rKO-S{;x5@RfR1Pm>~y8GkAC-CL2q@n?(( z^;wz7s0}Bi8HouUzm(VTmQJlA_{FoYUS^DmnENGeM5~r^vG`R157=3A9pGD^PE1Q8 zmy7anR~$1bE4Y@|aa;8m4Zg7R^A5=(SpK>%dS7>3Wja2?1$8X6?r}$O2`JXln=}j+ zJq?cGi5}e^D5;q@Y@9K_KPIFZxAA@@k&pF5C-w>}BXq=$2ret?DZoT?bsv65IR6@^bbXc|su8@|Fy?m)Ou>qR^M+7$xT3?_)NO9teZbAj zMLrbtZ$txSqk{;GI^BxFwYKR}@mI_Daew;UXd*-P?E9`^sSm|*VmNaL(hgt?QG}EM z(ScDsL0hV_2}TIZ=xyy<=!J0DbaZdf%Y=J|DDATIaUVGo9*LDRchLab9m|Ftit0w# zG|qZTE`+W>hLKo>7UO|EFwj2T%Ksd%hcxs{$XQ#CpBLc*1>*xP=~$-<(j2}s0ok!$ zjGl@vxcH5r{E&vu2~)kyqcwpi5hR|zQ45OZHLp(%vv12-woKFqy9?!3IuO8kn&&AJ z#zN;h1&86UD~5LgPd)x_Q&gZp^KDv0Ws9T#Y|6P#f8gJD5girXAl3;9sEJ!$5=H)P zlY3>7K_%D)1%8^e_aguxt6aFUMnG_*iI99 zCg=~MTgq4|d+OD(tAO^_0ggIT*B?CM?f!^6*(EdtQ4Dv$B7R^3kFnK6icY--BI?}6 zPG?-p3>(2t+&o`IP7#uC9OhB; z09U{%sg4Mp8c>oA%*O_C;kS4F!30}0)hN4fBrAYvHBWRqg$NK){k36;$I23LbBBU+ zF#NDj{G=bgo2=c0hH&h8`9>*B|04WRSn|RC6D+Wy%kp8N(BK*tYyArC!GOj2t>&5O zUZ8?)Q^>eB9?(4`VfF^rpV+O@kn%|S?~qM(!U)1%-f1 za5b5(f?5+yiT1$L%88E@nF3E0Ykx1RG9y+I6xDUGks&X$bb~NwS4*-Pad7<-_~`Z_ zqj>G!Urn^r{)cjmk*uQ-0VJ+w?d;)1-F9-D8zIr!aWeicLc>C_Go;RQOZ5uHAVi9_m-`>_~N#xLn~RhNFPj7 z^E7ngr4R2dtVRzhIf0cC^x=M!qYZU^o!d6g%VSKgv<6C_V!czRup%rbhv3I# zO>Dbkx!?6nLs*NY7p6OF?&~waPXSX@!?Gzf>_ml+i#kw~wIUx+c$F-*aKHn({3Hc% zZq4KeYBzDv&AUjQ`XYj0@1x^`{{SUSTX{N%c5NF#^k*esj++adxGzGs(WO?Pf1324rs%&qK~$TCFVT@c7p9o zUlpqC6>A^A-l=mV9`Uy8oB_>hN<@zyM^&=lE%2`{MX@y*C4CXs8M8z^vk##(H2&|? zwR>dgSj?6j@OZvV_Ax%)9LyW6F_^{`Ytdr=H%#*XGcNakA(a0ebN!!8@_)x%ow#Aw zE^0JnmFOS-QN@33k_Cn&l|ZEzNT!Ah?AML_UyS$vMBV;N=l?>A|6k~G;06}0obi(^ zCd380i$b|;sg;p5mH`0OcS7$)4&@&>A7WU7-IyuUp&``STdYzZs%?gXSX&G9f#GQP zN1CTZY3pT0*5E%b$vxFRPSgot&|dV1FROy;)hhD6@Cr*Ur$8GDqQ*`9Utv^%|G=-9D)r&pj2SSa;^4Ac<7MhELCq6Q;2|wC_ zfrd?wv@vG)x3U<~v5pSpKFx!)o3uF|+b{g{tMO~~_=ytSKlzc<<4#7@q*;_IwhPwC zzu?4?=xtrGc=S6eN=|`LMVPm$(|%}8FT;EQyy64{3qj!_a-Cun@SZ-f(vMR}NH}Ku zZcNj0o7G3$$WTpj`=gdRyu1wLXstN%Kqd1fU>ujGY|M5vwTskH^=X?(M|ra?eBoif zT7_EX+2Ezs*4UHs1<`j`x>dAIW)-#4MZ2andxZ{Ea`EGR{qDy_ zZe>RXcpC&GJQ&N^cO6IQWU4#A^kQ!2HZi@P$fc7r!5r@@@BDnrP0-a`x2n^oa?FyC zS??M%WFnitN9yy?7;1j8vJP8CjfSl`7J6__bPyxE9@VhS7?vjMzy}3v_xmqa{v^Mi z(A6e>MMetQmY77sZ)+HPb4-ps`HT2D2L1ho zHmUrz1QBRU4DvZS9g3=W0bVPSc4bH)v{}SW(#|L5dR&Fpk{k#6VVenAnM!)E8bcEj zloQ|gb;S(X?eY;f& z+izd+Cwj3!77#vImv8Yd=x;Zk9CXWPB8>vb{+0Z>Ppch%Ak{BDS6ooGJY+OZrU*h0 z3u6>kTWAEAd6&LAR1dF7D(<1B`33u_f(3TA6xi2Ahf3Rzh;`eEQ+QN@A=I#;b)(_P zHY&L4k3R-fyXpjroZK4A$FypDUXRVC7OPbUv6L$7B!Tj}i9DeHfm<Ibip8GJ*pa-+F@tQi#-a9N4<17Py?5$w{2cjUs~v6zk_t4?5`MRd)rVx-Fu7Qv34YL z@?$*cy2>DAB#O03J#u(*KytY$9R|56y!M9%&TC~IJU~4NCu}IkX4wS=l!Vv*+QCHq zy%as0D28;TnHB3CZ)rLMnBwJ10j;1)b2mpPqi}2BD7T4;h1vsQxZm{0t6xk1hG6H+ zivlZr*U*Yp| zDI^r;HPo)f61_lnBLdkQ8rXgf>sVhowJr=i|Jup&Kc1$%r%;^8@K#j+0{<%~7&J%> znhwE1Y(Ar?0V0-I_@3_EGueCBIe`llu=ZCw!3)fy_AeuoA$&lKA4jJY1oBT;15}1z zC*rsHq+W8+qM12%jyz9bklL=!sb2Oc(|k6R2`FrAF&KUqNaC@&C|u&Ns?~&n_-Vwz z6WOs|{i4UX-IoU0%NJlE!Iul2{OPdsqdDfj{W1vSpHgC&ugz!>uWHGWyF0=D``#qf zv(I1`EKrHd(f4%9i4G6FAi-+4vi1~kX+v^=3afdOZk5!wB zCY52l=LX9mhS2J%&4xNr_i!W*WUyBj-12Vk$c>JhnP5oxA!9##?ZgYjok}lFQZ|tQ za9}^piLZ7@LA3T0Xfyx8*Ted6oiQ_s`lE;aq;k`7Q)(fzTj>WgY=dFg{>o_RG^8X z-YtdzXSG~@QS3l+|5qa&y9Ji@>h5PPo*dZN+uk zR`Vq%C&?naBbFz5a*f#G1G=vHtRjPt9)mof> z>pby|4ulrg(|2%MRAnk;JD`?w)z+Wzex+k_TF>Pm66JNVTKEa(`s}2MTF}f-RGI)W zDIScLg}cdHRQR^K=VG(aj5ssb3O+~@9m<|aE%2&^{`9@AcC9{Vj9ZIFYNGfqsx+Z# zkhp8}7Rs$6C1atGgNnJbg+!1~vAGxaYXu?{nT08KNYfzv6#F0ogI>g;Zp&@r<;Bg? z&lh3tbGhG4rVkzHGh))vT9WUGnU<=8)wxZr@ToYxZ%}a zAJ)?A`K601@oL5AH3YV%bn@7#6n;LTd%Qbfd%bAJb0voR%GIVNjxx8a;@KW%{>_36 zol=KN+Q7%UWektaHVnXpo<}=zUQT3X-kT5KXd_Rgwn^qgoe5Lx%OBinU7x`g!V94z z2~yr*ltA2P&z-#eyzzB@A7n#<_GL%h-=L5y@Rg4$wylmLjSNwQi#Ji~PdVade7F-} zeEi!rp`zgco5+x8nYuE6+jF)a z8N-^;;D6Ajbc;X|1|MS>;ntPBTc1Bgl%1P-UBsQHxqs#@{TtPyh6>?BerY1oXzW_T z*e=Lq%0c2s`Pbc(os4@h=_ze#&KHN;vK&7w4#GF-oSGn89ctcUC&}_) znc@G|&l#+(6t+6a$(bmZsLnMX&fUeUwWkys+-Jd%mv>kJ3yoYHyKVH=U`W%OeuSt_ z)uwZff&{_NUpC(CZwwGR8l|6Pk6^LB=xPSE;quj}h;pe`$9mD=)r9Apm{z?G}om@tcJm1<4a%a?nYY2HRo+PwAk0so{PZ z8h@^dy^6M8c z#*zhLBv@VUtue-YU(L=e-cNQyBQ%!bibHDH13ubtyX1?W^S`7%?y0dXTsVQ05gN0! zKx6S?rf=TD&rHzralz9%p`lcQw9|5XcMfEhf1*H_-KMbSf%=I87Fd2h8n{-K?{Mx> zKKiX!+8->`zE*@g2~G$rnyGRu*iRUCTop_QVur1tfaVqC!uD9mA|II|&675~Fdl%| z(i&VUF&i!@%n@K&D0r&km!mR9ANX^v$o0an;<2RyniFm%^DnL=O^qP zAMn4lxYVsM+atX&%Lv{B;Y;+GzeKaOvOZ1^6?3!h~9`Bf8<=9xDg^xtP&BTMeRM*C-steG*rQA78TQf|afA-L;ephvF z(xM5VTp+!^-~Ov9gB@}uu7KFfy)I;B82R~@0=DJ@eo_e~hc`ZaxV8;Tx_cF)NbEkfy?iJ_pZ)m+n6wcK? zSqioAsp0_*x{M6^X~^ECb`SVIsCrq?d?&zcKQAbZ<;i0jiQgtxQ-`u1*glhc9+}2ad5z zOYpXUg0pqiL7( z*>=v)#_i`c7%CWrh#16R51hlAY2{n6UWUvlLU!RCT`~$y@57Z%LDTmWf}6As)m>+D#a?|FAALLFL0w?sa}3XJ&$M0*@{1W}8B}zO7xLh&1*{fyN zjtozE@v(fyYbs_$LH)(K<=+#n5h!8gGQ5s2lJi2TGx)(hZ!>5#XyY@3)EM=(OvhV} ztWPM>)rp}CtHiw@rpp2<)uI^C3#(rkoeH~=drKb?f`=*8==sS3jP3rZYER_N1+2Ii zx5m~}S(qmH5TbjbxA2%E5;|z{sR*%V>AzsYVu{1w3KHv{2%4$)#_wtI{oEa5KW{2J zeV-$yb>)QVKOod2W!Jl1Y!ciA=Lq0mMM^WBUYplUUJaKgqP7zz4`1owGoGssOUKMM zl`uwLGwj}4Cp$z5`G8970;GiFJ1A_?;N?AMVC-x12d>?~c>;g|gvU<6RFTh|Dcuu2 z?n=6XW6PfX1)t@nassgSR-@W&GJ0lxIXVm(R%uladOX>7+-RlfqFB8WFe=rL@8Uyb zxGuq_XuV99ZW>i}r7>tj`(Xx~#OS%Gu(^g8T_O84y6^E}=HX-JrE#`^p{gAQIcMzh zS;C88{unT}10L_*Srnm?cGyrz7dXC^!51B>P_OueKk+yH^#Pq|;K9JlE{Vzfl_QJO z+l9TSqx!??imXy&{6K4dKQRPn9XQ<(8aI*iFBF1OR2ip_N+1`9UUk#+wb`qVcse!Ehitf$p!x{GM_n7c2qfV z4>plUQlZ0!YyKA@`9wzq4*Q{I#|eAh>zY5O7E?6w#SjbbP%V3``v*&Q9aNQ29!INm zgGj(t&v5kl5Qegkv(wC(Rqcll(m$V0w#Tm0!3^$@ zxBWq3vwgr>jlQCZZr(4WvCR~Jv!9Bu<>!+bT6hH#B>k*%_Ig||Cq}L)Zx4F0E`)$t z7FZ1haI#K#`%FY|)l%>TN(m-^Y#W8=)+S=+|CS5FI!kyr?E*{@FHAd4*oZtqQy19q zY+;N4qX1ajivrzUEHkuz)WfD;^+5VHrqQIB!Lb z9Xn>%FH<{B(I9|5*!w?hHV;al6%{_Kfv1rDc2BpWO^w zwD1#1Ce7uTilHQ`E9erI)9jW1PdK4jf=A-r`RDc>7m5cgtyDK}WAxRo&w$uw`$tU& zjl$ebD0^8<5eW{Jv7tu_yCM{mQ(-b~hNTU}@Zh1M&`SFF$elbZI;B|UKlDj2v_!MN zQd&?`=HhIzU<(s7#(8Is{^{@8$;$C``)QO=bBz8>XB!D5vS8dFD}LBm&b6sOu=+fh zpAL%0Ehg(6tE@cakd_>e;i-dnQ<;6T5%ml*;u?{kt4wy(^v7*>dP8#VJIZ92L!q&z zkS9eJ$mp!7w|K75ILsH$RZ;?`)a}eTw;DM;v!Y?(fpLuoH2&@DLw^?)noCJ57U#6` zDsfq?QEjbq&!SjPC{`c2bG%AsbC7s6V%Yu&;_&Cuh)meXK?ypk2w|by&ee7eqrd5< zz!nAAl&b_Qp11!Xq2ow^C9VFP<+B_e8K7>n^O?4IcnyCcmw+O#=td4hR+b+L@?!}{ zeFYEHE)Om5uPCAjo0y%j)bXg}cPH4AP|X5i$-K#S^sqC@Wrtu}oa|n2H2>EQE*mCE zl`_k}W9*H8!fb`ioQu>%1s9bq%#sxO86O!Ao9*s-_AkqsGahb~10Ls~QwZppSf|JScDyjVCJFS#nE&6X`r>|G^L2i9G5@hh%=*4a zLGEtm!_Q(7kiws6>h11S03}_!oMx z2|y(eAG4ai8=`^>AuXljLNuTsu=Zx+vGF%(b6!q;VbkT>J+Uba3e{5F9WHrcwf76X?7jp&tlW7folhpDkUixrOYgu=*mrGue>=E9cu!(;g- zcH^OU$Lxi_p!P7W=Wa%IVaGS;l3{Fkdonc5R~Iv=AYG36Wmy-K7kT3_zil&s01N9Gcz-Xv@_J1NQ_c42v>B*{4e!! zGt)F9nqQ9in}s|0V$db%ii>{sp611OF>(qS^y(2YzC!Z3T37Mboyq%!Q<>Y%1U^~G zHcdv9kiEx;;Wdl)zzcTWtJCFH@2A~y1NWGI=UHcWp&kd+HpUvJ1%p#S(OspW)6aHeV>{2-Ie@=BOmDb|t9C%HhOQ~fE&mJoze{$fm?T2!4f5bKc3O^KQz zqq83}>)%P`M)&ZMnq|by-_x*KeRi|fx-ypNIc%)TJTm z;bFKe=~U9;@Agb0q9!opFVl~G@HHpuPL%XH0w^Pc{ITz|Lv9baAJ}fH8*i~j9Y@nk<1pEiTXK55HdmYRmQC=($;ZASO6T1c0S--QHqxVg)Ec#Q*5t|ikIx~?7yX_x&3l|tBSaXaRmpj+iHa}3}B z_6=-_>#;qooG%T?Idv?TE$PA!XQM5@p!SX$_0b-fF^-aPH^~oO6*j7%AKo5OwV}Rd z(H_<4w(a)@7@QWD^WG;HU~TbjAr~UVq2Q&=FX`Q2Rpe$IQ4~_94&V3*q3iZVXcTZl zg}Wt>-bg=ku?5{&hVxz+{_x)%{7T7JkoP1qkwvVu{L@;!a9k!J47#1#wJl(HiSSNm zmsLvhRB)@p(qND(cefbIpq2^%x5La2fpedJO-b$}!0GF5J$^~*YL!*1VXu=a1f-z}GxzCWB-l{Z0=^hrEXO-WFC)t5ln!c98V~*>!e+g; zM5lhx_hSrISZ?Ca!aEVCWd(uPn}ct`>BJUBGOmj^eg!7X0$bDA3C3-M9M^A8%V@70 zfpaZdBK7|x{_c%ijY@xpsQEbd&Jll(T!gmzb!BUH$1DE$g1J>oFr?J%nnfB=ecCE5 zYWLj!wJ{aYU6W*^TyE-z8WHGkh1$`3t7V&Z%aU_S^woY;df3rlP9IrxixFZFdGIMg z0b5n}{zeEsM2FM3;h>SH%{K%N?F4Gd++OwOf421N-I*%IH-33|Pm9WGSGGgm)YF`H zl9iw7-cm28r{NhQ<7X7jl`2}%QzgN}BcaWA#gtsbmq|5h!WI0}>1s(cl0SCg>#g4A z>|&$tD$;U6!G5bo?GW{B7TB+}3l~X8lb^Q?#)J_3Z7U*gxh!7%kjvgOnPBu?fJOU{ z_j`|x>-C9Y_GjC3cb$YAp4sTQeM@}47_d3ACPE0$HPj1g6|fxHTWdxo@wxk6Zu5&p z%Ma_lznr?IiLv5ik8m#WoQ$r_6HLf!Ny$HH0`Cgu2!#*}aCW59$KK7>7tN{Yj0_TF zyDoZ)EK)Kg>*GJ13dUMp~Zt)8+imy(s>GfPGaNzUx zq9!uSV1^D693gNuI-jpu&1ygFWx<1;^K50k|h741ad@DkMyvPPChLa^YLcO;}1 z#urpOIZtc4;~ftN_X%ykv#<9ro_!d$Xufu^A0YwhQHB%Zaao3Cl5^X2BL32bi;uv^ zV+X%J=pwFG?gznx;Q`n#XVGOCGp*oZ%dS5kvv|!~#O{u>EFRB#vI>z4TVcjM%WJW^ zmp*ffA6OH%)V+fvF~kO-Y+c}EI6vdfrVYH_AzJf4*kQM~`1Qjs>~v>1=(G^6CLm07 zp*;vW_D3wU?Ye>FqF|Vd;mp%U>}iMOU3U#Rv0ct=&}jTyNk)c+lLGO`1-Nl(5~y>dEVO@DoioE2JSbr~iLQ?7*VeF{V&|S+SeND$JZ$x z_IUr*nRDd&loY((}0>$1UKA*7*5^i{cGn;m8Z9SGI; zgppGYs(sA^Q%!w1>L85MyayO)j*XRW1!y;!FLPOCtxR zRPa@I;g4CU0&_5j+>7**Tztu3$ot4V^8QcOS|~;-U=D6BN$~v^ zR|1L_bI&{x%#qat}Z-W`mFaHinCD{e<@Ag%jSz3V>5+c9(C# zct3YO2v3n6m_X^ejgiqNMIH7&5K<;8*RMC7#1n6F-m9XIVGg`kG6wDZZj@}!%OiNp z_0gG77tGy|e2dxV*(&xl%onHM3EJPxvSA;PpazY%;yX(>tOBj9tR(Jg4ODf3bk`4? zWGI=2iqY&+s)9zdF>>Kwoa1&hhLJ_yeDzx10fEs@_E5&srq3pX#@_pBnO=)Arw7tW zn{=(`h7pQYp?lTwZ8*>dz`EM~JKXOA1B5yOZxtx1mSY9}^n5MnrsMlN9*6w%8Tkuti0Oq1hFXgbTt%=ctZ_JS{#;l6LxW$#6hhpAzo;PTeVsoI56A; z_3~u2hXSRiu0oebmrL*tH}C5Lajj6tCo*L~?2J51P)Aq<*27+`lEz7!-Lg_KGVka= z@u4-TQn+Cpx6bhUii54Yu5L#ha_^yuxQN&lHYe(fh{;wW&_w);huESvOZyO@**w8F z*Ci~#tkgSgwG&ydb&bHIfP>8nv%4}E^M|qR$18@P>yL%i5kK%=gfuLr6@>VO2)Q}U zg^$_0y<88@6^X)SNC8+)zIEt*;S{h~F1!_j0=r;t)K;xErf>-mi(Cx=>mKrCa-1#@ zm38ly@qV9Q3zB*T4_jHy!ELyvBT9wy^@p@NKPm6cVJBJCKM60@!2l^``>LUq!t^{G z&c`qG){`XPA*SbMUdEP>eD(ygNBsS0{MYSpzGrLquU5w`9LU?2B)OZc*_3bu&Zmlz5X`6K*VOEBs{)& zP$G@YhIY_k_CStRM0k{3Kv2tzaq7J(G#9s$`tilQ`CA3<_VAlPxQq9!TaMN=mB6&adM{Lq!CqZd5Seg2M=Q+u1ZOQjcM z`v8AtRs4L-$&x`HTh6|KCiDnQ8o^1gO~gZxU&Ug+3VmMof)bx|_~`U$_)aX;d)dl^+O=rpgM$0W76&%) z6b<@<-ty`GR@XANHzF#Oq1h!_$59SUo4urmC-5j0uZ3_q~@B-?liEST%f63mBXFG*3DguRzP zbF=-kkm_pj$-^EFCNBRbf6{>_a&-rJt+CZUc{SwYJi3`n&#(IONNgLIe7pEn_fvb1 zQF6$UGV-6H0#ka4Imsn8vJKw=*z1&Lze%#ivcSyH5zMLP(kB6ee;feD(#P3g~wo7j!^V*7^l8NY=(O%i!NkK|*&Y zhW4K?UK)u8jT`*C!^}#3Jsjh4HvZt=4*3J-K1}2~3tbK*bay$-MTCxrdW}EkiyBOu zn@s8ldQSFjeUN!x0kr+}Z#tph*bzAG_^Vw8eP!hyDjI22z$0U5)Ugs|@I(@-UH&d| z6|?*Q_hp>OveAF}&_Iv>|K=`PUg99jMe(2+I1-h#;S4U#{+ZZFR6l@zCQ^a0;xwPF_)Rj17sW6PsN()BpDRIj|GS@*h!( z;!OO+Y%?;uJEy}+5MbH5&pUa4p=LkppB>KxyckdXRtyg~@ZElGzBKDJy<$#HrGq;Tu^_IAD^IKLQHIii9dF0iMbZU3n78;hy} zOlgDrt6JU{GQ+OLVXD;OH1|MjyUez`cWbXKv@F53e3*ArZ$aQW4A$N4nXteuug=g1 z!hyYjKsVX2VSO3~xOsnMjrg~B2H7;JC;C?jwxN{%2k=@gm^(j+fOd9R zPUQUd!}ql3-Tv#d)h2J(i7+AUYIu;>Oj1((5`O`m)Pl)ssw$G6oBpi;I(EWS2k66k zj>tR-sZQbUpy6WqkSbNeYWer?dY_b4-oK=e{aVOIKBpA4-#An~q?~P5NNI-#M|;@d z2oJtPp#-^kd$^!U+{am4Tp?4gEUqjt5j05s${;GbhDQF`zpvN-jp%SdDnc zvlY^ai_n!%G!n9$G6 zdfkZpk^_J@y+h{>wn(tFXc?vPiK>)`h|;g4x9>_eLR3uB(5GX<$}m^J;^7qJksav`Shj=F_7R0*n#E&g_Da_2wX_r8Dex-o?ymh~iZaqJ^ zNGbRhoBU3`N@6J6KuHr?d$g(I8K7#`Kv9<(-blkce^?x2!0l_j!v81`$L+;|sE42M zi_C?@KHVN$&S|>DZoF4C#n&Qy;?SXo12vyVW|_07Wk&7tNR!aekdYOnYOij9Ezp^! z2GL)ai*^r2{aJd|<=q&i%?mpy68bwpvd&!;Ti2)GzV0OUCYmS8Isll(;a1v6f(Xe-A4bW!~_#T4LqA)-gmc~02hWo0a;(leJ@Ic$iPl9abC*2xHTZ8 zcTiPXpbgo)@iZ`)TV7sH#%k9XZ6W3jcMYc~VXmWwPQiY%`e)l0Iq}@Tr-QXD1%vNM z*6bMBOP?#;!dC^eR{>R!V=0_9LG)A&811{P3c}mjkzFky;4$OL`-v*uKYu4A}e(dOAw?8&FfW z#on|w^vdUE{LrO4)BAKUT4nR>h~dEjnxL6?;~t<``kT8(vp+JlRVh&<&)js>ftH%q z80os|>yX(}z^#Y);)radhy}!ha55xR$kDorUyWDSU2&_^aKEe*lb-17^?bIds-;)c@{P#Yq~RbPKv zF)UFs`#Xf`JO{e3w#ygUtG;le?aV^U8O4#=APN+0Cp4}*J2h-ws-$cDiz+a=uK`wsX*&u4>e@GMe80vdI7U6oz@X9|3A^#L!?lO*TW zmpVR?E1XC-XYd+C;jv$Ww?mSGf(;hcaTVaW3>RI~BZh9>2|tHonp^XsgbXs<-|?It z)2*6h!(oCdDskhiY;4j9nBaIGow)TL4pEL;X@krG+Kc@qxO^bZYu*0Tgns~DPNZc5 zuPec6EDH{J=o0RlVqm<8i+Klf1WW`Afs0d!zS#_t2$R`}rc`~%4_7!L>MFWN}1{uh}P*{juyoyl;oC#FwKJ(sgQaq`T+UVeBzN@`O^ zSO^&igr;+erNZJ>d;E;CkSopTALN|?PCq=-6(Hk@-wGdFA|-@r?Yq4sRCFbPEAXWT zFr(AUQhv!r1v?jny3U~4(}3!Pn3$OMa4`|6C}y~B2}AsB(%)O903J2pKYxpQ|6VvD zDjf7x%U_C#rMOh;I*z@--{qz<^{wr@z6mQjeh!>1JG=wlWQmemf$~8630(nfgB}a^>m#YFZGKQQqrqt}@s(+brV9i9N z&|G~ht7I;N5#~22C?r+?{udwu@X3QW!8VEn6OkG4%*(7RkCBgv@=tHH#4WN);{sNk zMKSmtT^dG6dnVJ3b!SWNjEr0>o+pi~jCrCiFagbM=nDnMO z`0R#Ks=nwrf$pPkNz0NA^0fb8On?~|-eno+X48~7C12oD#=gg#jI;cN`Hq5}0!Ki= za&o#+N{T}||66Rvj54dH8l9w1guY<0*T9=^rLIiZzaoXdRl26lhL7nA>xc>-_$&y) zwq2ckWRnjd@-ZUMzI^f0QV&p9Brt@7u>C&Ob_$*6 z*stauyr@Tm!-w^JnMbAoKTZW)jZ5m(jKRoX!RjSN*`;WGn>*6Y#gb0O&@yy0g5C!H z9|28xVBc0Nr^p_|uTM@?Rn@@U97Eut>VOxeTndSnQR0 zX5pI)y)}Zm8S!^wBZ_lNN(!6(Gs?XJ-Q7!kv&zJT@gz_Hq#26PR{xV@9E z4?16SUSP+MMAT+8arTDq8k=J2=%W}xw;|B~%gPlpSZLT;(1CQqdTOfo!iC=6(*=_* z1L)OGCBEtBGRn)vCGPHl6y-G>&;wipT$2Jwkr$16S&~p9d1l2(XDjm2XRxzIA(wTr zYe8#V7rv^*0b%mdXS^+1@pWuk8G>#bpcBM%$$z=z{}k)D zT>VQ+!-z#E|CALnpnGes-Hs=q2WAi-rChw#Axs<|9$q7b9IOCh$IHv%VhIR1o=C6< z)Pu^lx~B$;f%K$*?3|@+HR#j?4ZXxj+(-k~uTG(99q7hYHJbc>^dcdzY%`#1`swx= z(1Fg=T;TyN=o%M#?b5cI%6O&-LGNc@X?i+k($h-- z^c_2B&}ZDGKu;hwg5oI5iA9$N1eI{ei$F`Q3ot9UK(Ag5`%3;qCU^6l^Gc&lf=axGa z78a&6Dok~EobG)lCMKqE+l(6r>LlqgiMQbD$juOY!4MP{VC3eKeWrKpm|mFZ=O>ZW z6gmb5fg=+T01mq#F2*-hnh25g$L-q&Itpbi=o20-C+W6CH0>EQ>i~L|mh{5ZGo@#| zqf{ytfZp%G6&>h7UV==jMn={Skhdo6y%o=dKmN1=jDJ`Xi8F#zBM@iNpg+GwgrK9k z1oU1z%QF)E;UDsELPBN+G3>eUk5iTwbd_eunbOqhQL3l+zxJ0SEa)(X%`F#r38)IW z8G+!!YoZj6PfrUAoA&VgK)ogiMx|iUYr?%k{R1e_cRC~Js4fA0(a!P&e}5-R6zPCE zfj#4#FMtknpJA%XGv5F6bezMPKCex+oA4qFx{sd(*3y*=1euiQQhsjX4nlfr<$qEg z|I_C`XI|LxLRKvp0-5uZ{f-=%Ck#^wLnOlEg!GI|>Q^8)!-2TyQDnL486wRKicHsB zsk9tG7Xasp0p+ew3`fvWT@!Wj7@jE>lL#U;3wrLHlfS<|@nAAT15=}5Z@NIo64leM zZFyV}@YqWeC)&+=JNC%os>GPE07*@vkSvde1sLQvKpK#dbw+b0ifkeP(HZaQQ8DLo zNx%_ij%uWdiHWcjPx82K>s>r0sLlm_L_!(3;bc>E3U`*z>5=tORgdq*Q=W z>I$Gs@}l!NJCfolL3OU{GCYCWS(Mp8mtx(CkbW-Ep~N?=@aZ@Rm}mIAy9XuZhWcjY zdimAKtC9fpq&S%Pgge0aW?4!XzGo$m?!%SiGT+_lIzkX|}L zEPFcG^fJ}cBNjN%dK5q}Pk@__R(gpGw zwbo5`Z}bzAwY3LYio?7qbkm!u&~7ajJJDP>x{R!EJK_i zO!TjD3V?WG#<|im|A4I0pz_?~+oOL8sRz)XSYt_27YfyGpvz!)3cx%wfq))L-MEN2 zEr2?;CN3r{J+x4@HdyI);R#7@=~n-8l5#5!O33ib@N@NbfY3^e$~`R1!CeEOdoOgz z6u+>e+3CD0&Q(yFxK*&#R}d5vm0B3!yEQZ;*L8cer)P3ivFCu{2s)}0K^HBWHE|7K zo|%vdgHE`EF1be+@mUIi_rR?V4qIW#P*%)ZXW7(egh@^g3jc(-aLChAsmeTaCBiZX z#~4*iOi5TwlxF&lGm0Gx-TlkFca&vpcL>W2b=rQ$Yq}!bOQD&*RSL^a1?8^We_6V; zKCL?B;sOL6)oGy9n8SQ!IFJsr|8b#Z&CQfeSH-}DzslFqv7{uc%ojj+-ttUhxN5p0 zBTFR+2NRvD@)Nq|BsipkL61?XDyMsU@6ept@#gfhz=b;kGq)>L5P@9!LXh_vsQ`?9 zNrJ+mG$=e^`!AkL)4-rF>xf&Vqfk7cD@7i56CZn?B#;w}4stpNCLJ7gKpiM2te2K$ z`TF~p74~+sgWZS(mEMX>hvpy}^zD8Dk^q$g-WL-FIWQ1*oIZWwo72NmVMQqc-Pc_U z`gHG-PzrSE`K6MjY0(2dn1G<8Itg@<{qXmKoI=GE=mM7XvQQdy_&4-iSwaSt#3+6I zwVl$WfVeXNdTL>_fPfwo;Flm2mMOy0!Aq}&-G1L!_N zPnQ8>?;+@@P6Ayy=TSeuj8LacMg(-?r_-pXrwd?uGc(Y8VVE>g91{m#d|8;n`-QDu zI~>K*urrXbRazbHl@w44{EEY3Vp1VV5!R9}RD@~XTo@&d+YuFYCbN7;>B7qLQ1691 zO0uR$`Ib2)B>I$caJxURnFM0l%n!pnO1TO$xrAh_Ty}cbBz2DryfSy1=FFEG` z`@ocxcx$%8Zgr)J$IAj9o7Fnd_cqnyX+v2Hy7R1)1M)mWPPqE}XKG3JXGlNpc}rUE z?+&1An&VQv9VyT&|L06r;SOhaLAE7AEyc|E8Qv2}EWI#H z<*0yoI(X}*vebdDhK-&LyS<{)YAt)(A- z{L3%Lhr3x0dUQ$?ExGnK<*F*CsA;d5uZlugm7@0>kQBjIh~U`?rq#_QYMZ-)JGR^} zppyjMSrdm2fN|;h+{`$Vd=9BD{vj@Po`N#}@`UrQ0;izNOxJwByy)!oo;Qz7+O9Dr*)C ze_6WSj{;pkjBXb6Y{FBDya4`Rz>uz}gC~u9Bjp6#W}_N{Z1Mt^%p6i%9vRt4>KT!4 zU2_q2dr5P(G04+>13H*>H-h@orRUE>B0$LtFF0hRMb?D~oNjF|JF&F9Fizm)pP%m^ z;#1}hxi2+2d3nNwbFk;u83$ijY~gf1;mjFF7?L_fG((k9ZA8N zDJ?5hrDw*~ocJaC7Yg*mvB8#t9sp47O;TuLJi)NbY40Tu04sI`Lj9mD*`R{wT*lb; z&=v*3+iHoIp{Rz|Y7M=Y);1?5&5_GRLHd-2Jl#j2liOV^J~?11K|Q0?-66pzEiyZY zfL=;KSH(Fw`Q-Z_&r5K3cLe)jyIKS~IyjUlVloqaf%9`JnECV%g`D(Kr=YFj zae+Z);-Hu?F9@*vI-QFN%alq_{PK$*1^T0QN=rcpucFqGdL#r$sXJ3B%o;%m z>FGp3UmBRIF$Dc$FQuiRJAy%FooYYuq#3WB-56I>4C6t)3Q;cMXYDJP&ixGpVGa6w=C@s+=hwsXGM z8qfon$5MDqZt->nTx#}p2{`V2^|&Tjl9CdkeIc!>sY?H?t!+*L_d?LR`Fjn20#Nq@ z=w!JOOd@@-Wy^)Cde_jva=#1!-BU~~dU$?yxup7u-uwTtJ-I477Z^|X+UgLP9w#mX z*JZ2kR)?*jH0YTp{N4XcgARGRzyt^MU#jXZED|a2wZ?T}Ns56R+$m@)%6c=J8i3!C spG^KKCN9=mqil6^3g})A0%fcE|7L?|G7oJ_JOBUy07*qoM6N<$f*dLYd;kCd literal 56279 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≷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 YFk3lwU?nL#ZPyF%}@8}bvn=`+x(KQ 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 V)8@ZmF}DB!002ovPDHLkV1m%gnehMs diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index a261bb1266afc52d6c3d67bee78fd9093f0180e0..aec18a5c50bea662c13afb96f2dd26be5aa9b82d 100644 GIT binary patch literal 2670 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 B(0~8{ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png index 5025417b7b8b2f6d18eebfc50b95c669861bf899..82ec814399f320145ea172d52e14ec292514da6c 100644 GIT binary patch literal 2104 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 TjF?!R00000NkvXXu0mjfGO3QI diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index a8ba42587f73d597477e962f9dc592dec5825ab6..01502904ee8150b292fef253aa17a3eb865c62fb 100644 GIT binary patch literal 3431 zcmXw5cR1T$`;JHuF)TSh zR8^yNP%2$tTl_w~e(!s(Gp_4-o^zl3+~@w|WZ~>AIN62SK_C#PCDzmtSiS!aHfCUc zW1jIh0l8*mYXkzd-Gv`rfr3EHAe@b}nVx-%rde@TR+ffY5z^?MqE@V;cANpO9b->c zGtAYsuGcax)3zY$TGy%SXBpr+1jS8M3=52njcsjhH8eDYg@qFn6D1@h;GCjr26v?t zy$wygs;jF{{?`yHA$qn=>V~-}3zDvNgPu*Zu1%w%Lx+Jw2Z2D)G%XSqk=DkNL}eUM z*h&O4OjS1x07PReP!<&mT2UG%4^(tg5$eI`^|RQyB&AgX)Qt)N8bab`04&WO4^B1Qc|jVnc}hz%4j?nuLMHN>yN>0+M&_5a^IuGRSl*Tkeej!LK?5{Z}mt4*9K zej)X?m#U+aAEQtxZ*OlUB_)4<|H#P5z`#J@HJh56kVs@{Y3YRv7cdx%oflabTNaEJ;m2xrEq?#bOZ%L}5uwcznIFLnR)MH*%z8-)r}{ zP61vSxGBc2HUB{?)}<1AkwUC!#n@D)X18DTtqF;)&&X>Jjc=Eck;%);yGv-Ut|cd> zKhDf+N>5L(YiI)unRcf!H#b+`t`)GKo^5km8yOHy)3jLItQ3O-I8-#ZkTp#n0-6I} z1&o@LlcQr* zhy{RTW#Nu?PS#Y7gO4?>>+5s$?8)U^Hw95!dow;|37yeEDVekU>}qjtN#$!BMeCZs z^pE`y$x|Y$3wItjkou5*>8a?MdP@h!_kp{$+v8$OAq$2rrLyf~$Ji3MXrY z*SQ(T4a@sHFQtCJXQ>lhKUNe-Ttn;&Fl!y1K2kd7qJz *d|*@IxRnyhq0{_|Xy5 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 H-uV9mG=V>s literal 5177 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 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 6c36de736eaf2e28eabe9fe1f687cd6010d905d2..eb53bb5468ab3902f8728483127108481b0aa614 100644 GIT binary patch literal 4775 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 literal 11515 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 Date: Sun, 1 May 2016 17:10:19 +0200 Subject: [PATCH 17/18] fixed failing release build --- app/proguard_general.pro | 1 + 1 file changed, 1 insertion(+) diff --git a/app/proguard_general.pro b/app/proguard_general.pro index 85c6e7df..85fdc34e 100644 --- a/app/proguard_general.pro +++ b/app/proguard_general.pro @@ -1,4 +1,5 @@ -dontobfuscate +-optimizations !code/allocation/variable -dontwarn android.support.** -keep class android.support.** { *; } From 0417c865d4feadb8c44f2a94e4447823c03c8619 Mon Sep 17 00:00:00 2001 From: Long Tran Date: Sun, 1 May 2016 17:19:05 +0200 Subject: [PATCH 18/18] increment version --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 0ae7640e..46ffe660 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,7 +14,7 @@ android { applicationId "com.tlongdev.bktf" minSdkVersion 14 targetSdkVersion 23 - versionCode 41 + versionCode 42 versionName "2.1.0" applicationVariants.all { variant ->