Java tutorial
package cm.aptoidetv.pt; import android.accounts.AccountManager; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.support.v4.app.ListFragment; import android.text.Html; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.AnimationUtils; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.RatingBar; import android.widget.RelativeLayout; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import com.commonsware.cwac.merge.MergeAdapter; import com.flurry.android.FlurryAgent; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.FailReason; import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; import com.octo.android.robospice.SpiceManager; import com.octo.android.robospice.persistence.DurationInMillis; import com.octo.android.robospice.persistence.exception.SpiceException; import com.octo.android.robospice.request.listener.RequestListener; import com.squareup.otto.Subscribe; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import cm.aptoide.ptdev.AllCommentsActivity; import cm.aptoide.ptdev.Aptoide; import cm.aptoide.ptdev.MoreRelatedActivity; import cm.aptoide.ptdev.R; import cm.aptoide.ptdev.ScreenshotsViewer; import cm.aptoide.ptdev.VeredictReview; import cm.aptoide.ptdev.adapters.RelatedBucketAdapter; import cm.aptoide.ptdev.adapters.StoreSpinnerAdapter; import cm.aptoide.ptdev.configuration.AccountGeneral; import cm.aptoide.ptdev.dialogs.AptoideDialog; import cm.aptoide.ptdev.dialogs.ProgressDialogFragment; import cm.aptoide.ptdev.downloadmanager.PermissionsActivity; import cm.aptoide.ptdev.events.AppViewRefresh; import cm.aptoide.ptdev.events.BusProvider; import cm.aptoide.ptdev.events.OnMultiVersionClick; import cm.aptoide.ptdev.fragments.FragmentComments; import cm.aptoide.ptdev.fragments.GenericResponse; import cm.aptoide.ptdev.fragments.callbacks.AddCommentCallback; import cm.aptoide.ptdev.fragments.callbacks.SuccessfullyPostCallback; import cm.aptoide.ptdev.model.ApkPermission; import cm.aptoide.ptdev.model.Comment; import cm.aptoide.ptdev.model.MediaObject; import cm.aptoide.ptdev.model.MultiStoreItem; import cm.aptoide.ptdev.model.Screenshot; import cm.aptoide.ptdev.model.Video; import cm.aptoide.ptdev.services.HttpClientSpiceService; import cm.aptoide.ptdev.utils.AptoideUtils; import cm.aptoide.ptdev.webservices.ListRelatedApkRequest; import cm.aptoide.ptdev.webservices.json.GetApkInfoJson; import cm.aptoide.ptdev.webservices.json.RelatedApkJson; import static cm.aptoide.ptdev.utils.AptoideUtils.withSuffix; /** * Created with IntelliJ IDEA. * User: rmateus * Date: 15-11-2013 * Time: 14:34 * To change this template use File | Settings | File Templates. */ public abstract class FragmentAppViewTV extends Fragment { @Override public void onAttach(Activity activity) { super.onAttach(activity); } @Override public void onResume() { super.onResume(); BusProvider.getInstance().register(this); } @Override public void onPause() { super.onPause(); BusProvider.getInstance().unregister(this); } public static class FragmentScreenshots extends FragmentAppViewTV { private LinearLayout mainLayout; @Subscribe public void refreshDetails(final AppViewActivityTV.ScreenshotsEvent event) { if (event == null) return; mainLayout.removeAllViews(); ArrayList<MediaObject> mediaObjects; View cell; if (event.getScreenshotsAndThumbVideo() != null) { mediaObjects = event.getScreenshotsAndThumbVideo(); //Log.d("FragmentAppView","media objects "+ Arrays.toString(mediaObjects.toArray())); String imagePath = ""; DisplayImageOptions options = new DisplayImageOptions.Builder() .showImageForEmptyUri(android.R.drawable.sym_def_app_icon).cacheOnDisc(true).build(); int screenshotIndexToAdd = 0; for (int i = 0; i != mediaObjects.size(); i++) { cell = getActivity().getLayoutInflater().inflate(R.layout.row_item_screenshots_gallery, null); final ImageView imageView = (ImageView) cell.findViewById(R.id.screenshot_image_item); final ProgressBar progress = (ProgressBar) cell.findViewById(R.id.screenshot_loading_item); final ImageView play = (ImageView) cell.findViewById(R.id.play_button); final FrameLayout mediaLayout = (FrameLayout) cell.findViewById(R.id.media_layout); if (mediaObjects.get(i) instanceof Video) { screenshotIndexToAdd++; imagePath = mediaObjects.get(i).getImageUrl(); //Log.d("FragmentAppView", "VIDEOIMAGEPATH: " + imagePath); mediaLayout.setForeground(getResources().getDrawable(R.color.overlay_black)); play.setVisibility(View.VISIBLE); imageView.setOnClickListener( new VideoListener(getActivity(), ((Video) mediaObjects.get(i)).getVideoUrl())); mediaLayout.setOnClickListener( new VideoListener(getActivity(), ((Video) mediaObjects.get(i)).getVideoUrl())); //Log.d("FragmentAppView", "VIDEOURL: " + ((Video) mediaObjects.get(i)).getVideoUrl()); options = new DisplayImageOptions.Builder() .showImageForEmptyUri(android.R.drawable.sym_def_app_icon).cacheOnDisc(false) .build(); } else if (mediaObjects.get(i) instanceof Screenshot) { options = new DisplayImageOptions.Builder() .showImageForEmptyUri(android.R.drawable.sym_def_app_icon).cacheOnDisc(true) .build(); // imagePath = AptoideUtils.screenshotToThumb(getActivity(), mediaObjects.get(i).getImageUrl(), ((Screenshot) mediaObjects.get(i)).getOrient()); imagePath = mediaObjects.get(i).getImageUrl(); // Log.d("FragmentAppView", "IMAGEPATH: " + imagePath); imageView.setOnClickListener(new ScreenShotsListener(getActivity(), new ArrayList<String>(event.getScreenshots()), i - screenshotIndexToAdd)); mediaLayout.setOnClickListener(new ScreenShotsListener(getActivity(), new ArrayList<String>(event.getScreenshots()), i - screenshotIndexToAdd)); } mainLayout.addView(cell); ImageLoader.getInstance().displayImage(imagePath, imageView, options, new ImageLoadingListener() { @Override public void onLoadingStarted(String uri, View v) { progress.setVisibility(View.VISIBLE); } @Override public void onLoadingFailed(String uri, View v, FailReason failReason) { imageView.setImageResource(android.R.drawable.ic_delete); progress.setVisibility(View.GONE); //Log.d("onLoadingFailed", "Failed to load screenshot " + failReason.getCause()); } @Override public void onLoadingComplete(String uri, View v, Bitmap loadedImage) { progress.setVisibility(View.GONE); } @Override public void onLoadingCancelled(String uri, View v) { } }); } } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_screenshots, container, false); mainLayout = (LinearLayout) v.findViewById(R.id._linearLayout); return v; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); } public static class ScreenShotsListener implements View.OnClickListener { private Context context; private final int position; private ArrayList<String> urls; public ScreenShotsListener(Context context, ArrayList<String> urls, int position) { this.context = context; this.position = position; this.urls = urls; } @Override public void onClick(View v) { Intent intent = new Intent(context, ScreenshotsViewer.class); intent.putStringArrayListExtra("url", urls); intent.putExtra("position", position); context.startActivity(intent); FlurryAgent.logEvent("App_View_Clicked_On_Screenshot"); } } public static class VideoListener implements View.OnClickListener { private Context context; private String videoUrl; public VideoListener(Context context, String videoUrl) { this.context = context; this.videoUrl = videoUrl; } @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(videoUrl)); context.startActivity(intent); FlurryAgent.logEvent("App_View_Clicked_On_Video"); } } } public static class FragmentAppViewDetails extends FragmentAppViewTV { private TextView description; // private TextView showAllDescription; private LinearLayout descriptionContainer; // private ScrollView scroller; private RelativeLayout layoutInfoDetails; private TextView store; private TextView downloads; private RatingBar rating; private TextView likes; private TextView dontLikes; private TextView size; private TextView publisher; private ProgressBar loadingPb; private TextView publisherWebsite; private TextView publisherEmail; private TextView publisherPrivacyPolicy; private View publisherContainer; private View whatsNewContainer; private TextView whatsNew; private boolean collapsed = true; private LinearLayout detailsContainer; private View row2; private View row3; private Spinner spinner; private boolean initializedView; @Subscribe public void refreshDetails(final AppViewActivityTV.DetailsEvent event) { //Log.d("Aptoide-AppView", "getting event"); //Log.d("Aptoide-AppView", "Setting description"); if (event == null) return; if (event.getDescription() != null) description.setText(event.getDescription()); // //Log.d("Aptoide-description", "lines "+ description.getLineCount() ); // if (event.getDescription()!=null && event.getDescription().length() > 250) { // // description.setMaxLines(10); // showAllDescription.setVisibility(View.VISIBLE); // showAllDescription.setOnClickListener(new View.OnClickListener() { // // // @Override // public void onClick(View v) { // // if (collapsed) { // collapsed = false; // description.setMaxLines(Integer.MAX_VALUE); // TypedValue outValue = new TypedValue(); // getActivity().getTheme().resolveAttribute(R.attr.icCollapseDrawable, outValue, true); // showAllDescription.setCompoundDrawablesWithIntrinsicBounds(outValue.resourceId, 0, 0, 0); // showAllDescription.setText(getString(R.string.show_less)); // FlurryAgent.logEvent("App_View_Expanded_Description"); // } else { // collapsed = true; // TypedValue outValue = new TypedValue(); // getActivity().getTheme().resolveAttribute(R.attr.icExpandDrawable, outValue, true); // showAllDescription.setCompoundDrawablesWithIntrinsicBounds(outValue.resourceId, 0, 0, 0); // description.setMaxLines(10); //// scroller.scrollTo(0, scrollPosition); // showAllDescription.setText(getString(R.string.show_more)); // FlurryAgent.logEvent("App_View_Colapsed_Description"); // } // } // }); // descriptionContainer.setOnClickListener(new View.OnClickListener() { // // @Override // public void onClick(View v) { // // if (collapsed) { // collapsed = false; // description.setMaxLines(Integer.MAX_VALUE); // TypedValue outValue = new TypedValue(); // getActivity().getTheme().resolveAttribute(R.attr.icCollapseDrawable, outValue, true); // showAllDescription.setCompoundDrawablesWithIntrinsicBounds(outValue.resourceId, 0, 0, 0); // showAllDescription.setText(getString(R.string.show_less)); // FlurryAgent.logEvent("App_View_Clicked_On_Show_More_Description"); // } else { // collapsed = true; // TypedValue outValue = new TypedValue(); // getActivity().getTheme().resolveAttribute( R.attr.icExpandDrawable, outValue, true ); // showAllDescription.setCompoundDrawablesWithIntrinsicBounds(outValue.resourceId, 0, 0, 0); // description.setMaxLines(10); // showAllDescription.setText(getString(R.string.show_more)); // FlurryAgent.logEvent("App_View_Clicked_On_Show_Less_Description"); // } // } // }); // // } if (event.getDescription() != null) { row2.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_in)); row3.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_in)); row2.setVisibility(View.VISIBLE); row3.setVisibility(View.VISIBLE); detailsContainer.setVisibility(View.VISIBLE); detailsContainer .startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_in)); loadingPb.setVisibility(View.GONE); loadingPb.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_out)); } MultiStoreItem[] items = event.getOtherVersions(); if (items != null) { StoreSpinnerAdapter adapter = new StoreSpinnerAdapter(getActivity(), items); initializedView = false; spinner.setAdapter(adapter); spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { if (!initializedView) { initializedView = true; } else { spinner.setOnItemSelectedListener(null); MultiStoreItem item = (MultiStoreItem) parent.getAdapter().getItem(position); BusProvider.getInstance() .post(new OnMultiVersionClick(item.getName(), item.getPackageName(), item.getVersion(), item.getVersionCode(), item.getDownloads())); if (Build.VERSION.SDK_INT >= 10) FlurryAgent.logEvent("App_View_Opened_Store_From_Spinner"); } } @Override public void onNothingSelected(AdapterView<?> parent) { } }); } publisher.setText( Html.fromHtml("<b>" + getString(R.string.publisher) + "</b>" + ": " + event.getPublisher())); size.setText(Html.fromHtml( "<b>" + getString(R.string.size) + "</b>" + ": " + AptoideUtils.formatBytes(event.getSize()))); if (((AppViewActivityTV) getActivity()).isMultipleStores()) { if (event.getStore() != null) { store.setVisibility(View.VISIBLE); store.setText(Html.fromHtml("<b>" + getString(R.string.store) + "</b>" + ": ")); } else { store.setVisibility(View.INVISIBLE); } } else { spinner.setVisibility(View.GONE); if (event.getStore() != null) { store.setVisibility(View.VISIBLE); store.setText( Html.fromHtml("<b>" + getString(R.string.store) + "</b>" + ": " + event.getStore())); } else { store.setVisibility(View.INVISIBLE); } } downloads.setText(Html.fromHtml("<b>" + getString(R.string.downloads) + "</b>" + ": " + withSuffix(String.valueOf(event.getDownloads())))); rating.setRating(event.getRating()); rating.setOnRatingBarChangeListener(null); rating.setVisibility(View.VISIBLE); likes.setText(Html.fromHtml("<b>" + getString(R.string.likes) + "</b>" + ": " + event.getLikes())); dontLikes.setText( Html.fromHtml("<b>" + getString(R.string.dont_likes) + "</b>" + ": " + event.getDontLikes())); if (event.getDeveloper() != null) { publisherContainer.setVisibility(View.VISIBLE); if (((AppViewActivityTV) getActivity()).isUpdate()) { if (event.getNews().length() > 0) { whatsNewContainer.setVisibility(View.VISIBLE); whatsNew.setText(event.getNews()); } } publisherContainer.setVisibility(View.VISIBLE); String email; if (event.getDeveloper().getInfo().getEmail() != null) { email = getString(R.string.username) + ": " + event.getDeveloper().getInfo().getEmail(); } else { email = getString(R.string.username) + ": " + getString(R.string.not_found); } publisherEmail.setText(email); String privacyPolicy; if (event.getDeveloper().getInfo().getPrivacy_policy() != null) { privacyPolicy = getString(R.string.privacy_policy) + ": " + event.getDeveloper().getInfo().getPrivacy_policy(); } else { privacyPolicy = getString(R.string.privacy_policy) + ": " + getString(R.string.not_found); } publisherPrivacyPolicy.setText(privacyPolicy); String website; if (event.getDeveloper().getInfo().getWebsite() != null) { website = getString(R.string.website) + ": " + event.getDeveloper().getInfo().getWebsite(); } else { website = getString(R.string.website) + ": " + getString(R.string.not_found); } publisherWebsite.setText(website); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_app_view_details, container, false); description = (TextView) v.findViewById(R.id.descript); // showAllDescription= (TextView) v.findViewById(R.id.show_all_description); descriptionContainer = (LinearLayout) v.findViewById(R.id.description_container); layoutInfoDetails = (RelativeLayout) v.findViewById(R.id.layout_info_details); store = (TextView) layoutInfoDetails.findViewById(R.id.store_label); downloads = (TextView) layoutInfoDetails.findViewById(R.id.downloads_label); rating = (RatingBar) layoutInfoDetails.findViewById(R.id.rating_label); likes = (TextView) layoutInfoDetails.findViewById(R.id.likes_label); dontLikes = (TextView) layoutInfoDetails.findViewById(R.id.dont_likes_label); size = (TextView) layoutInfoDetails.findViewById(R.id.size_label); publisher = (TextView) layoutInfoDetails.findViewById(R.id.publisher_label); publisherContainer = v.findViewById(R.id.publisher_container); publisherWebsite = (TextView) v.findViewById(R.id.publisher_website); publisherEmail = (TextView) v.findViewById(R.id.publisher_email); publisherPrivacyPolicy = (TextView) v.findViewById(R.id.publisher_privacy_policy); whatsNew = (TextView) v.findViewById(R.id.whats_new_descript); whatsNewContainer = v.findViewById(R.id.whats_new_container); detailsContainer = (LinearLayout) v.findViewById(R.id.detailsContainer); loadingPb = (ProgressBar) v.findViewById(R.id.loadingPb); row2 = v.findViewById(R.id.row2); row3 = v.findViewById(R.id.row3); spinner = (Spinner) v.findViewById(R.id.store_spinner); return v; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); } } public static class FragmentAppViewRelated extends ListFragment { private RelatedBucketAdapter multiVersionAdapter; private RelatedBucketAdapter develBasedAdapter; private RelatedBucketAdapter itemBasedAdapter; private MergeAdapter adapter; private List<RelatedApkJson.Item> itemBasedElements = new ArrayList<RelatedApkJson.Item>(); private List<RelatedApkJson.Item> develBasedElements = new ArrayList<RelatedApkJson.Item>(); private List<RelatedApkJson.Item> multiVersionElements = new ArrayList<RelatedApkJson.Item>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //Log.d("FragmentRelated", "onCreate"); adapter = new MergeAdapter(); itemBasedAdapter = new RelatedBucketAdapter(getActivity(), itemBasedElements); develBasedAdapter = new RelatedBucketAdapter(getActivity(), develBasedElements); multiVersionAdapter = new RelatedBucketAdapter(getActivity(), multiVersionElements); } @Override public void onStart() { super.onStart(); BusProvider.getInstance().register(this); spiceManager.start(getActivity()); } SpiceManager spiceManager = new SpiceManager(HttpClientSpiceService.class); RequestListener<RelatedApkJson> request = new RequestListener<RelatedApkJson>() { @Override public void onRequestFailure(SpiceException spiceException) { final View errorView = LayoutInflater.from(getActivity()).inflate(R.layout.page_error, null); Button errorBtn = (Button) errorView.findViewById(R.id.errorButton); errorBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getListView().removeHeaderView(errorView); setListAdapter(null); ListRelatedApkRequest listRelatedApkRequest = new ListRelatedApkRequest(getActivity()); listRelatedApkRequest.setVercode(((AppViewActivityTV) getActivity()).getVersionCode()); listRelatedApkRequest.setLimit(develBasedAdapter.getBucketSize()); listRelatedApkRequest.setPackageName(((AppViewActivityTV) getActivity()).getPackage_name()); spiceManager.execute(listRelatedApkRequest, ((AppViewActivityTV) getActivity()).getPackage_name() + "-related", DurationInMillis.ONE_DAY, request); } }); setEmptyText(getString(R.string.connection_error)); setListAdapter(new ArrayAdapter<String>(getActivity(), 0)); } @Override public void onRequestSuccess(RelatedApkJson relatedApkJson) { // setEmptyText(getString(R.string.no_related)); if (relatedApkJson == null) { //Log.d("FragmentRelated", "Related was null"); return; } //Log.d("FragmentRelated", "onRequestSuccess"); //Toast.makeText(getActivity(), "ItemBased size " + relatedApkJson.getItembased().size(), Toast.LENGTH_SHORT).show(); //Toast.makeText(getActivity(), "DevelBased size " + relatedApkJson.getDevelbased().size(), Toast.LENGTH_SHORT).show(); //Toast.makeText(getActivity(), "MultiVersion size " + relatedApkJson.getMultiversion().size(), Toast.LENGTH_SHORT).show(); List<RelatedApkJson.Item> relaatedlist = relatedApkJson.getItembased(); if (relaatedlist != null) { //Log.d("FragmentRelated", "items " + " " + relatedApkJson.getItembased().toString()); if (relaatedlist.size() > 0) { //Log.d("FragmentRelated", "itembased: " + Arrays.toString(relatedApkJson.getItembased().toArray())); itemBasedElements.clear(); if (PreferenceManager.getDefaultSharedPreferences(Aptoide.getContext()) .getBoolean("matureChkBox", true)) { for (RelatedApkJson.Item item : relatedApkJson.getItembased()) { if (!item.getAge().equals("Mature")) { itemBasedElements.add(item); } } } else { itemBasedElements.addAll(relatedApkJson.getItembased()); } View v = LayoutInflater.from(getActivity()).inflate(R.layout.separator_frag_related, null); ((TextView) v.findViewById(R.id.separator_label)).setText(getString(R.string.related_apps)); v.findViewById(R.id.more).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FlurryAgent.logEvent("App_View_Clicked_On_More_Related_Apps"); Intent i = new Intent(getActivity(), MoreRelatedActivity.class); i.putExtra("item", true); i.putExtra("packageName", ((AppViewActivityTV) getActivity()).getPackage_name()); i.putExtra("versionCode", ((AppViewActivityTV) getActivity()).getVersionCode()); i.putExtra("appName", ((AppViewActivityTV) getActivity()).getName()); i.putExtra("download_from", "app_view_related_apps"); startActivity(i); } }); adapter.addView(v); adapter.addAdapter(itemBasedAdapter); } } if (relatedApkJson.getDevelbased() != null && relatedApkJson.getDevelbased().size() > 0) { develBasedElements.clear(); if (PreferenceManager.getDefaultSharedPreferences(Aptoide.getContext()) .getBoolean("matureChkBox", true)) { for (RelatedApkJson.Item item : relatedApkJson.getDevelbased()) { if (!item.getAge().equals("Mature")) { develBasedElements.add(item); } } } else { develBasedElements.addAll(relatedApkJson.getDevelbased()); } View v = LayoutInflater.from(getActivity()).inflate(R.layout.separator_frag_related, null); ((TextView) v.findViewById(R.id.separator_label)) .setText(getString(R.string.more_from_publisher)); v.findViewById(R.id.more).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FlurryAgent.logEvent("App_View_Clicked_On_More_From_Publisher"); Intent i = new Intent(getActivity(), MoreRelatedActivity.class); i.putExtra("developer", true); i.putExtra("packageName", ((AppViewActivityTV) getActivity()).getPackage_name()); i.putExtra("versionCode", ((AppViewActivityTV) getActivity()).getVersionCode()); i.putExtra("appName", ((AppViewActivityTV) getActivity()).getName()); i.putExtra("download_from", "app_view_more_from_publisher"); startActivity(i); } }); adapter.addView(v); adapter.addAdapter(develBasedAdapter); } if (relatedApkJson.getMultiversion() != null && relatedApkJson.getMultiversion().size() > 0) { multiVersionElements.clear(); if (PreferenceManager.getDefaultSharedPreferences(Aptoide.getContext()) .getBoolean("matureChkBox", true)) { for (RelatedApkJson.Item item : relatedApkJson.getMultiversion()) { if (!item.getAge().equals("Mature")) { multiVersionElements.add(item); } } } else { multiVersionElements.addAll(relatedApkJson.getMultiversion()); } View v = LayoutInflater.from(getActivity()).inflate(R.layout.separator_frag_related, null); ((TextView) v.findViewById(R.id.separator_label)).setText(getString(R.string.multiversion)); v.findViewById(R.id.more).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FlurryAgent.logEvent("App_View_Clicked_On_More_Multiversion"); Intent i = new Intent(getActivity(), MoreRelatedActivity.class); i.putExtra("version", true); i.putExtra("packageName", ((AppViewActivityTV) getActivity()).getPackage_name()); i.putExtra("versionCode", ((AppViewActivityTV) getActivity()).getVersionCode()); i.putExtra("appName", ((AppViewActivityTV) getActivity()).getName()); i.putExtra("download_from", "app_view_more_multiversion"); startActivity(i); } }); adapter.addView(v); adapter.addAdapter(multiVersionAdapter); } itemBasedAdapter.notifyDataSetChanged(); develBasedAdapter.notifyDataSetChanged(); multiVersionAdapter.notifyDataSetChanged(); setListAdapter(adapter); setListViewHeightBasedOnChildren(getListView()); } }; private final void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } if (listAdapter.getCount() < 1) { return; } int totalHeight = listView.getPaddingTop() + listView.getPaddingBottom(); for (int i = 0; i < listAdapter.getCount(); i++) { View listItem = listAdapter.getView(i, null, listView); if (listItem instanceof ViewGroup) listItem.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.WRAP_CONTENT, AbsListView.LayoutParams.WRAP_CONTENT)); listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); listView.setLayoutParams(params); } @Override public void onStop() { super.onStop(); BusProvider.getInstance().unregister(this); if (spiceManager.isStarted()) { spiceManager.shouldStop(); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = super.onCreateView(inflater, container, savedInstanceState); // View v = inflater.inflate(cm.aptoidetv.pt.R.layout.fragment_app_view_related, container, false); // relatedListView = (ListView) v.findViewById(cm.aptoidetv.pt.R.id.list_related); doPreStuff(); return v; } @Subscribe public void refresh(AppViewActivityTV.RelatedEvent e) { doPreStuff(); } private final void doPreStuff() { ListRelatedApkRequest listRelatedApkRequest = new ListRelatedApkRequest(getActivity()); if (!((AppViewActivityTV) getActivity()).isMultipleStores()) { listRelatedApkRequest.setRepos(((AppViewActivityTV) getActivity()).getRepoName()); } listRelatedApkRequest.setVercode(((AppViewActivityTV) getActivity()).getVersionCode()); listRelatedApkRequest.setLimit(develBasedAdapter.getBucketSize()); listRelatedApkRequest.setPackageName(((AppViewActivityTV) getActivity()).getPackage_name()); // String cacheKey = "portrait"; // if(getActivity().getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){ // cacheKey = "landscape"; // }; spiceManager.execute(listRelatedApkRequest, ((AppViewActivityTV) getActivity()).getPackage_name() + "-related", DurationInMillis.ONE_DAY, request); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); getListView().setDivider(null); getListView().setCacheColorHint(getResources().getColor(android.R.color.transparent)); getListView().setItemsCanFocus(true); ////Log.d("FragmentRelated", "onViewCreated"); } } public static class FragmentAppViewSpecs extends FragmentAppViewTV { private LinearLayout permissionsContainer; private TextView min_sdk; private TextView min_screen; private AsyncTask<ArrayList<String>, Void, ArrayList<ApkPermission>> task; private View loadingPb; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_specifications, container, false); permissionsContainer = (LinearLayout) v.findViewById(R.id.permissionsContainer); min_sdk = (TextView) v.findViewById(R.id.min_sdk); min_screen = (TextView) v.findViewById(R.id.min_screen); loadingPb = v.findViewById(R.id.loadingPb); return v; } @Override public void onStop() { super.onStop(); ////Log.d("Aptoide-AppView-Permissions", "On Stop"); if (task != null) { ////Log.d("Aptoide-AppView-Permissions", "Canceling task " + System.identityHashCode(task)); task.cancel(true); } } @Subscribe public void refreshDetails(final AppViewActivityTV.SpecsEvent event) { if (event.getPermissions() != null) { min_sdk.setText(getString(R.string.min_sdk) + ": " + event.getMinSdk()); min_screen.setText(getString(R.string.min_screen) + ": " + event.getMinScreen().name()); if (task != null) { task.cancel(true); } task = new PermissionGetter().execute(event.getPermissions()); } } public class PermissionGetter extends AsyncTask<ArrayList<String>, Void, ArrayList<ApkPermission>> { @Override protected void onPreExecute() { super.onPreExecute(); setRetainInstance(true); } @Override protected ArrayList<ApkPermission> doInBackground(ArrayList<String>... params) { return PermissionsActivity.permissions(getActivity(), params[0]); } @Override protected void onPostExecute(ArrayList<ApkPermission> apkPermissions) { super.onPostExecute(apkPermissions); //Log.d("Aptoide-AppView-Permissions", "onPostExecute " + System.identityHashCode(task)); if (apkPermissions.size() == 0) { TextView noPermissions = new TextView(getActivity()); noPermissions.setText(getString(R.string.no_permissions_required)); noPermissions.setPadding(5, 5, 5, 5); permissionsContainer.addView(noPermissions); } if (getActivity() != null && permissionsContainer.getHeight() == 0) { fillPermissions(getActivity(), permissionsContainer, apkPermissions); permissionsContainer .startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_in)); permissionsContainer.setVisibility(View.VISIBLE); loadingPb.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_out)); loadingPb.setVisibility(View.GONE); setRetainInstance(false); } } private void fillPermissions(Context context, LinearLayout permissionsContainer, ArrayList<ApkPermission> permissions) { View v; String prevName = null; if (permissionsContainer != null) { for (ApkPermission permission : permissions) { v = LayoutInflater.from(context).inflate(R.layout.row_permission, permissionsContainer, false); if (!permission.getName().equals(prevName)) { prevName = permission.getName(); TextView name = (TextView) v.findViewById(R.id.permission_name); name.setText(permission.getName()); } else v.findViewById(R.id.permission_name).setVisibility(View.GONE); TextView description = (TextView) v.findViewById(R.id.permission_description); description.setText(permission.getDescription()); permissionsContainer.addView(v); } } } } /*public static class FillPermissions { public static void fillPermissions(Context context, LinearLayout permissionsContainer, ArrayList<ApkPermission> permissions) { View v; if (permissionsContainer != null) { for (ApkPermission permission : permissions) { v = LayoutInflater.from(context).inflate(R.layout.row_permission, permissionsContainer, false); TextView name = (TextView) v.findViewById(R.id.permission_name); TextView description = (TextView) v.findViewById(R.id.permission_description); name.setText(permission.getName()); description.setText(permission.getDescription()); permissionsContainer.addView(v); } } } }*/ } public static class FragmentAppViewRating extends FragmentAppViewTV implements SuccessfullyPostCallback { private TextView commentsTitle; private LinearLayout commentsLayout; private TextView noComments; private LinearLayout commentsContainer; private Button seeAllButton; private EditText editText; private ImageButton addComment; private Button dontLikeBtn; private Button likeBtn; private View loadingPb; private TextView goodVotes; private TextView licenseVotes; private TextView fakeVotes; private TextView freezeVotes; private TextView virusVotes; private TextView review; private Button flagThisApp; private LinearLayout flags_container; private ProgressBar loading_flags; private AddCommentCallback addCommentCallback; @Override public void onAttach(Activity activity) { super.onAttach(activity); ////Log.d("likes","onAttach"); addCommentCallback = (AddCommentCallback) activity; ((AppViewActivityTV) activity).setSuccessfullyPostCallback(this); } @Override public void onDetach() { super.onDetach(); addCommentCallback = null; //Log.d("likes","onDetach"); ((AppViewActivityTV) getActivity()).setSuccessfullyPostCallback(null); } @Subscribe public void refreshDetails(final AppViewActivityTV.RatingEvent event) { //Log.d("Aptoide-AppView", "getting event"); if (event.getComments() != null) { FillComments.fillComments(getActivity(), commentsContainer, event.getComments()); if (event.getComments().size() == 0) { commentsLayout.setVisibility(View.GONE); noComments.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_in)); noComments.setVisibility(View.VISIBLE); } else if (event.getComments().size() > 4) { noComments.setVisibility(View.GONE); commentsTitle.setVisibility(View.VISIBLE); commentsLayout.setVisibility(View.VISIBLE); commentsLayout .startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_in)); seeAllButton.setVisibility(View.VISIBLE); seeAllButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FlurryAgent.logEvent("App_View_Opened_See_All_Comments_Button"); Intent intent = new Intent(getActivity(), AllCommentsActivity.class); intent.putExtra("repoName", ((AppViewActivityTV) getActivity()).getRepoName()); intent.putExtra("versionName", ((AppViewActivityTV) getActivity()).getVersionName()); intent.putExtra("packageName", ((AppViewActivityTV) getActivity()).getPackage_name()); intent.putExtra("token", ((AppViewActivityTV) getActivity()).getToken()); getActivity().startActivityForResult(intent, 359); } }); } else { noComments.setVisibility(View.GONE); commentsLayout .startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_in)); commentsLayout.setVisibility(View.VISIBLE); } if (event.getUservote() != null) { if (event.getUservote().equals("like")) { likeBtn.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_action_good_pressed, 0, 0, 0); TypedValue outValue = new TypedValue(); getActivity().getTheme().resolveAttribute(R.attr.icRatingBadDrawable, outValue, true); dontLikeBtn.setCompoundDrawablesWithIntrinsicBounds(outValue.resourceId, 0, 0, 0); } else if (event.getUservote().equals("dislike")) { dontLikeBtn.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_action_bad_pressed, 0, 0, 0); TypedValue outValue = new TypedValue(); getActivity().getTheme().resolveAttribute(R.attr.icRatingGoodDrawable, outValue, true); likeBtn.setCompoundDrawablesWithIntrinsicBounds(outValue.resourceId, 0, 0, 0); } } loadingPb.startAnimation(AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_out)); loadingPb.setVisibility(View.GONE); } if (event.getVeredict() != null) { loading_flags.setVisibility(View.GONE); flagThisApp.setVisibility(View.GONE); goodVotes.setVisibility(View.GONE); licenseVotes.setVisibility(View.GONE); fakeVotes.setVisibility(View.GONE); freezeVotes.setVisibility(View.GONE); virusVotes.setVisibility(View.GONE); flags_container.setVisibility(View.VISIBLE); int stringResource; int drawable = 0; switch (VeredictReview.reverseLookup(event.getVeredict().getFlag())) { case GOOD: stringResource = VeredictReview.GOOD.getString(); drawable = R.drawable.ic_action_flag_good; break; case FAKE: stringResource = VeredictReview.FAKE.getString(); drawable = R.drawable.ic_action_flag_fake; break; case LICENSE: stringResource = VeredictReview.LICENSE.getString(); drawable = R.drawable.ic_action_flag_license; break; case FREEZE: stringResource = VeredictReview.FREEZE.getString(); drawable = R.drawable.ic_action_flag_freeze; break; case VIRUS: stringResource = VeredictReview.VIRUS.getString(); drawable = R.drawable.ic_action_flag_virus; break; default: stringResource = VeredictReview.UNKNOWN.getString(); break; } //Log.d( "veredictReview", VeredictReview.reverseLookup(event.getVeredict().getFlag()).getString()+ " VS" +stringResource ); //Log.d( "veredictReview", getString( VeredictReview.reverseLookup( event.getVeredict().getFlag() ).getString()) ); if (stringResource != -1) { review.setVisibility(View.VISIBLE); review.setText("" + getString(stringResource)); review.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(drawable), null, null, null); //Log.d( "veredictReview", getString( VeredictReview.reverseLookup( event.getVeredict().getFlag() ).getString()) ); } /* int stringResource; switch ( VeredictReview.reverseLookup( event.getVeredict().getFlag() )) { case GOOD: stringResource = VeredictReview.GOOD.getString(); break; case FAKE: stringResource = VeredictReview.FAKE.getString(); break; case LICENSE: stringResource = VeredictReview.LICENSE.getString(); break; case FREEZE: stringResource = VeredictReview.FREEZE.getString(); break; case VIRUS: stringResource = VeredictReview.VIRUS.getString(); break; default: stringResource = VeredictReview.UNKNOWN.getString(); break; } if(stringResource != -1) { review.setVisibility(View.VISIBLE); review.setText( "" + getString( stringResource ) ); //Log.d( "veredictReview", getString( VeredictReview.reverseLookup( event.getVeredict().getFlag() ).getString()) ); } if(event.getVeredict().getFlag().equals("good")) { review.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(R.drawable.ic_action_flag_good), null, null, null); } if(event.getVeredict().getFlag().equals("license")) { review.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(R.drawable.ic_action_flag_license), null, null, null); } if(event.getVeredict().getFlag().equals("fake")) { review.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(R.drawable.ic_action_flag_fake), null, null, null); } if(event.getVeredict().getFlag().equals("freeze")) { review.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(R.drawable.ic_action_flag_freeze), null, null, null); } if(event.getVeredict().getFlag().equals("virus")) { review.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(R.drawable.ic_action_flag_virus), null, null, null); }*/ } else if (event.getFlagVotes() != null) { loading_flags.setVisibility(View.GONE); flags_container.setVisibility(View.VISIBLE); goodVotes.setText(getString(R.string.flag_good) + ": " + event.getFlagVotes().getGood()); licenseVotes.setText(getString(R.string.flag_license) + ": " + event.getFlagVotes().getLicense()); fakeVotes.setText(getString(R.string.flag_fake) + ": " + event.getFlagVotes().getFake()); freezeVotes.setText(getString(R.string.flag_freeze) + ": " + event.getFlagVotes().getFreeze()); virusVotes.setText(getString(R.string.flag_virus) + ": " + event.getFlagVotes().getVirus()); flagThisApp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { final AccountManager ac = AccountManager.get(getActivity()); if (ac.getAccountsByType(AptoideTV.getConfiguration().getAccountType()).length > 0) { AptoideDialog.flagAppDialog(event.getFlagUservote()).show(getFragmentManager(), "flagAppDialog"); if (Build.VERSION.SDK_INT >= 10) FlurryAgent.logEvent("App_View_Opened_Flag_App_Dialog"); } else { ac.addAccount(AptoideTV.getConfiguration().getAccountType(), AccountGeneral.AUTHTOKEN_TYPE_FULL_ACCESS, null, null, getActivity(), null, null); } } }); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //Log.d("likes","onCreateView"); View v = inflater.inflate(R.layout.fragment_app_rating, container, false); commentsTitle = (TextView) v.findViewById(R.id.title_comments); commentsLayout = (LinearLayout) v.findViewById(R.id.layout_comments); noComments = (TextView) v.findViewById(R.id.no_comments); commentsContainer = (LinearLayout) v.findViewById(R.id.commentContainer); seeAllButton = (Button) v.findViewById(R.id.more_comments); editText = (EditText) v.findViewById(R.id.editText_addcomment); addComment = (ImageButton) v.findViewById(R.id.button_add_comment); dontLikeBtn = (Button) v.findViewById(R.id.button_dont_like); dontLikeBtn.setOnClickListener(new AddLikeListener(false)); likeBtn = (Button) v.findViewById(R.id.button_like); likeBtn.setOnClickListener(new AddLikeListener(true)); addComment.setOnClickListener(new AddCommentListener()); loadingPb = v.findViewById(R.id.loadingPb); goodVotes = (TextView) v.findViewById(R.id.flag_good); licenseVotes = (TextView) v.findViewById(R.id.flag_license); fakeVotes = (TextView) v.findViewById(R.id.flag_fake); freezeVotes = (TextView) v.findViewById(R.id.flag_freeze); virusVotes = (TextView) v.findViewById(R.id.flag_virus); review = (TextView) v.findViewById(R.id.flag_review); flagThisApp = (Button) v.findViewById(R.id.button_flag); flags_container = (LinearLayout) v.findViewById(R.id.flags_container); loading_flags = (ProgressBar) v.findViewById(R.id.loading_flags); return v; } @Override public void clearState() { editText.setText(""); //editText.setEnabled(false); editText.setEnabled(true); } public class AddLikeListener implements View.OnClickListener { private final boolean isLike; RequestListener<GenericResponse> requestListener = new RequestListener<GenericResponse>() { private final void dismiss() { ProgressDialogFragment pd = (ProgressDialogFragment) getFragmentManager() .findFragmentByTag("pleaseWaitDialog"); if (pd != null) pd.dismissAllowingStateLoss(); } @Override public void onRequestFailure(SpiceException spiceException) { //Log.d("likes","onRequestFailure"); dismiss(); } @Override public void onRequestSuccess(GenericResponse genericResponse) { //Log.d("likes","onRequestSuccess"); dismiss(); if (genericResponse.getStatus().equals("OK")) { Toast.makeText(AptoideTV.getContext(), getString(R.string.opinion_success), Toast.LENGTH_LONG).show(); manager.removeDataFromCache(GetApkInfoJson.class, ((AppViewActivityTV) getActivity()).getCacheKey()); BusProvider.getInstance().post(new AppViewRefresh()); } else { for (String error : genericResponse.getErrors()) { Toast.makeText(getActivity(), error, Toast.LENGTH_LONG).show(); } } } }; private SpiceManager manager; public AddLikeListener(boolean isLike) { this.isLike = isLike; } @Override public void onClick(View v) { final AccountManager accountManager = AccountManager.get(getActivity()); if (accountManager.getAccountsByType(Aptoide.getConfiguration().getAccountType()).length > 0) { // addLike(); } else { accountManager.addAccount(Aptoide.getConfiguration().getAccountType(), AccountGeneral.AUTHTOKEN_TYPE_FULL_ACCESS, null, null, getActivity(), null, null); } } // private void addLike() { // manager = ((AppViewActivityTV)getActivity()).getSpice(); // // AddLikeRequest request = new AddLikeRequest(getActivity()); // request.setApkversion(((AppViewActivityTV)getActivity()).getVersionName()); // request.setPackageName(((AppViewActivityTV) getActivity()).getPackage_name()); // request.setRepo(((AppViewActivityTV) getActivity()).getRepoName()); // request.setToken(((AppViewActivityTV) getActivity()).getToken()); // request.setLike(isLike); // // if(Build.VERSION.SDK_INT >= 10) { // if (isLike) { // FlurryAgent.logEvent("App_View_Clicked_On_Like_Button"); // } else { // FlurryAgent.logEvent("App_View_Clicked_On_Dont_Like_Button"); // } // } // manager.execute(request, "1234" , DurationInMillis.ONE_SECOND, requestListener); // // // // // AptoideDialog.pleaseWaitDialog().show(getFragmentManager(), "pleaseWaitDialog"); // } } public class AddCommentListener implements View.OnClickListener { @Override public void onClick(View v) { final AccountManager accountManager = AccountManager.get(getActivity()); if (accountManager.getAccountsByType(AptoideTV.getConfiguration().getAccountType()).length > 0) { FlurryAgent.logEvent("App_View_Added_A_Comment"); if (addCommentCallback != null) { addCommentCallback.addComment(editText.getText().toString(), null); } } else { accountManager.addAccount(AptoideTV.getConfiguration().getAccountType(), AccountGeneral.AUTHTOKEN_TYPE_FULL_ACCESS, null, null, getActivity(), null, null); } } } public static class FillComments { public static void fillComments(Activity activity, LinearLayout commentsContainer, ArrayList<Comment> comments) { final SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm"); View view; commentsContainer.removeAllViews(); for (Comment comment : FragmentComments.getCompoundedComments(comments)) { view = FragmentComments.createCommentView(activity, commentsContainer, comment, dateFormater); commentsContainer.addView(view); } } } } }