package com.targroup.coolapkconsole.activities; import android.graphics.Color; import android.os.Bundle; import android.net.Uri; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.content.Intent; import android.content.ActivityNotFoundException; import android.content.res.Resources; import android.widget.ImageView; import android.widget.TextView; import android.graphics.Bitmap; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.support.design.widget.Snackbar; import android.support.design.widget.CollapsingToolbarLayout; import com.targroup.coolapkconsole.R; import com.targroup.coolapkconsole.model.AppDetail; import com.targroup.coolapkconsole.model.AppItem; import com.targroup.coolapkconsole.model.DownloadStatItem; import com.targroup.coolapkconsole.utils.CoolapkApi; import com.targroup.coolapkconsole.utils.Util; import java.util.ArrayList; import java.util.Collections; import butterknife.BindView; import butterknife.ButterKnife; import im.dacer.androidcharts.LineView; import rx.Subscriber; public class DetailActivity extends AppCompatActivity { public static final String EXTRA_APP_ITEM = DetailActivity.class.getSimpleName() + "/EXTRA_APP_ITEM"; private AppItem mAppItem; @BindView(R.id.detail_icon) ImageView mIcon; @BindView(R.id.detail_status) TextView mStatus; @BindView(R.id.detail_packageName) TextView mPackage; @BindView(R.id.detail_id) TextView mID; @BindView(R.id.detail_creator) TextView mCreator; private Bitmap icon = null; private View mContentView; @BindView(R.id.detail_version) TextView mVersion; @BindView(R.id.detail_size) TextView mSize; @BindView(R.id.detail_last) TextView mLastUpdate; @BindView(R.id.detail_downloads) TextView mDownloads; @BindView(R.id.detail_updater) TextView mUpdater; @BindView(R.id.chart_downloads) LineView mDownloadsChart; @BindView(R.id.layout_progress) View mProgress; @BindView(R.id.toolbar) Toolbar mToolbar; @BindView(R.id.toolbar_layout) CollapsingToolbarLayout mToolBarLayout; private int mColor; private AppDetail mDetail; private Resources res; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContentView = getLayoutInflater().inflate(R.layout.activity_detail, null); setContentView(mContentView); Intent intent = getIntent(); if (intent == null) { finish(); return; } mAppItem = intent.getParcelableExtra(EXTRA_APP_ITEM); if (mAppItem == null) { finish(); return; } bindViews(); refreshDetail(); } @Override public void onDestroy () { if (!mLoadDetailSubscriber.isUnsubscribed()) mLoadDetailSubscriber.unsubscribe(); super.onDestroy(); } public void bindViews(){ ButterKnife.bind(this); mDownloadsChart.setShowPopup(LineView.SHOW_POPUPS_MAXMIN_ONLY); //optional res = getResources(); mStatus.setText(mAppItem.getStatus()); mPackage.setText(mAppItem.getPackageName()); mID.setText(String.format(res.getString(R.string.detail_id),mAppItem.getId())); mCreator.setText(String.format(res.getString(R.string.detail_creator),mAppItem.getCreator())); setSupportActionBar(mToolbar); setTitle(mAppItem.getName()); getSupportActionBar().setDisplayHomeAsUpEnabled(true); if (Util.getPublishState() != Util.PublishState.PUBLISH_STATE_STABLE) { Snackbar.make(mToolbar, "ID:" + mAppItem.getId(), Snackbar.LENGTH_SHORT).show(); } } private Subscriber<Object> mLoadDetailSubscriber = new Subscriber<Object>() { @Override public void onCompleted() { mProgress.setVisibility(View.GONE); mContentView.setEnabled(true); // mVersion.setText(String.format(res.getString(R.string.detail_version),mAppItem.getVersion())); mSize.setText(String.format(res.getString(R.string.detail_size),mAppItem.getSize())); mLastUpdate.setText(String.format(res.getString(R.string.detail_last),mAppItem.getLastUpdate())); mDownloads.setText(String.format(res.getString(R.string.detail_downloads),mAppItem.getDownloads())); mUpdater.setText(String.format(res.getString(R.string.detail_updater),mAppItem.getUpdater())); ArrayList<ArrayList<Integer>> series = new ArrayList<>(); ArrayList<Integer> downloadsList = new ArrayList<>(); ArrayList<Integer> installList = new ArrayList<>(); ArrayList<String> bottom = new ArrayList<>(); int count = 0; // 0xFF56B7F1 ArrayList<DownloadStatItem> downloadStatItems = mDetail.getmStats(); Collections.reverse(downloadStatItems); for (DownloadStatItem item : downloadStatItems) { downloadsList.add(Integer.parseInt(item.getmDownloads())); installList.add(Integer.parseInt(item.getmInstalls())); bottom.add(item.getmDate()); count++; if (count >= 6) break; // Do not show too many data in preview chart. } series.add(downloadsList); series.add(installList); mDownloadsChart.setBottomTextList(bottom); mDownloadsChart.setDataList(series); mDownloadsChart.setColorArray(new int[]{mColor, Color.parseColor("#FFC93437")}); mIcon.setImageBitmap(icon); mToolBarLayout.setBackgroundColor(mColor); mToolBarLayout.setContentScrimColor(mColor); mToolBarLayout.setStatusBarScrimColor(mColor); mToolbar.setBackgroundColor(mColor); } @Override public void onError(Throwable e) { mProgress.setVisibility(View.GONE); mContentView.setEnabled(true); } @Override public void onNext(Object o) { if (o instanceof AppDetail) { mDetail = (AppDetail)o; } else if (o instanceof Integer) { mColor = (Integer)o; } else if (o instanceof Bitmap) { icon = (Bitmap)o; } } @Override public void onStart () { mProgress.setVisibility(View.VISIBLE); mContentView.setEnabled(false); } }; private void refreshDetail () { CoolapkApi.getAppDetail(this, mAppItem).subscribe(mLoadDetailSubscriber); } @Override public boolean onCreateOptionsMenu (Menu menu) { getMenuInflater().inflate(R.menu.menu_detail, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); return true; case R.id.action_launch : try { Intent launchIntent = getPackageManager().getLaunchIntentForPackage(mAppItem.getPackageName()); if (launchIntent == null) return true; startActivity(launchIntent); } catch (ActivityNotFoundException ignore) {} return true; case R.id.action_show_in_coolapk : try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.coolapk.com/apk/" + mAppItem.getPackageName()))); } catch (ActivityNotFoundException ignore) {} return true; default: return super.onOptionsItemSelected(item); } } }