Java tutorial
/* * Copyright 2014 Luke Klinker * * 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.klinker.android.twitter.ui.tweet_viewer; import android.app.ActionBar; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Point; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.widget.SwipeRefreshLayout; import android.util.TypedValue; import android.view.Display; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.LinearLayout; import com.klinker.android.twitter.R; import com.klinker.android.twitter.adapters.ArrayListLoader; import com.klinker.android.twitter.adapters.PeopleArrayAdapter; import com.klinker.android.twitter.data.App; import com.klinker.android.twitter.manipulations.widgets.swipe_refresh_layout.FullScreenSwipeRefreshLayout; import com.klinker.android.twitter.manipulations.widgets.swipe_refresh_layout.SwipeProgressBar; import com.klinker.android.twitter.settings.AppSettings; import com.klinker.android.twitter.utils.Utils; import org.lucasr.smoothie.AsyncListView; import org.lucasr.smoothie.ItemManager; import java.util.ArrayList; import twitter4j.ResponseList; import twitter4j.Status; import twitter4j.Twitter; import twitter4j.User; import uk.co.senab.bitmapcache.BitmapLruCache; public class ViewRetweeters extends Activity { public AppSettings settings; private Context context; private SharedPreferences sharedPrefs; private ActionBar actionBar; private AsyncListView listView; private long tweetId; private String listName; private LinearLayout spinner; private LinearLayout noContent; public FullScreenSwipeRefreshLayout mPullToRefreshLayout; @Override public void finish() { super.finish(); overridePendingTransition(R.anim.activity_slide_up, R.anim.activity_slide_down); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); overridePendingTransition(R.anim.activity_slide_up, R.anim.activity_slide_down); context = this; sharedPrefs = context.getSharedPreferences("com.klinker.android.twitter_world_preferences", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE); settings = AppSettings.getInstance(this); setUpWindow(); Utils.setUpPopupTheme(this, settings); actionBar = getActionBar(); setContentView(R.layout.ptr_list_layout); mPullToRefreshLayout = (FullScreenSwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout); mPullToRefreshLayout.setOnRefreshListener(new FullScreenSwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { onRefreshStarted(); } }); if (settings.addonTheme) { mPullToRefreshLayout.setColorScheme(settings.accentInt, SwipeProgressBar.COLOR2, settings.accentInt, SwipeProgressBar.COLOR3); } else { if (settings.theme != AppSettings.THEME_LIGHT) { mPullToRefreshLayout.setColorScheme(context.getResources().getColor(R.color.app_color), SwipeProgressBar.COLOR2, context.getResources().getColor(R.color.app_color), SwipeProgressBar.COLOR3); } else { mPullToRefreshLayout.setColorScheme(context.getResources().getColor(R.color.app_color), getResources().getColor(R.color.light_ptr_1), context.getResources().getColor(R.color.app_color), getResources().getColor(R.color.light_ptr_2)); } } spinner = (LinearLayout) findViewById(R.id.list_progress); noContent = (LinearLayout) findViewById(R.id.no_content); listView = (AsyncListView) findViewById(R.id.listView); BitmapLruCache cache = App.getInstance(context).getBitmapCache(); ArrayListLoader loader = new ArrayListLoader(cache, context); ItemManager.Builder builder = new ItemManager.Builder(loader); builder.setPreloadItemsEnabled(true).setPreloadItemsCount(50); builder.setThreadPoolSize(4); listView.setItemManager(builder.build()); tweetId = getIntent().getLongExtra("id", 0); onRefreshStarted(); } public void setUpWindow() { requestWindowFeature(Window.FEATURE_ACTION_BAR); getWindow().setFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND, WindowManager.LayoutParams.FLAG_DIM_BEHIND); // Params for the window. // You can easily set the alpha and the dim behind the window from here WindowManager.LayoutParams params = getWindow().getAttributes(); params.alpha = 1.0f; // lower than one makes it more transparent params.dimAmount = .75f; // set it higher if you want to dim behind the window getWindow().setAttributes(params); // Gets the display size so that you can set the window to a percent of that Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x; int height = size.y; // You could also easily used an integer value from the shared preferences to set the percent if (height > width) { getWindow().setLayout((int) (width * .9), (int) (height * .8)); } else { getWindow().setLayout((int) (width * .7), (int) (height * .8)); } } public int toDP(int px) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, px, getResources().getDisplayMetrics()); } public void onRefreshStarted() { new Thread(new Runnable() { @Override public void run() { try { Twitter twitter = Utils.getTwitter(context, settings); Status stat = twitter.showStatus(tweetId); if (stat.isRetweet()) { tweetId = stat.getRetweetedStatus().getId(); } // can get 100 retweeters is all ResponseList<twitter4j.Status> lists = twitter.getRetweets(tweetId); users.clear(); for (Status status : lists) { users.add(status.getUser()); } ((Activity) context).runOnUiThread(new Runnable() { @Override public void run() { adapter = new PeopleArrayAdapter(context, users); listView.setAdapter(adapter); listView.setVisibility(View.VISIBLE); spinner.setVisibility(View.GONE); if (users.size() == 0) { noContent.setVisibility(View.VISIBLE); } mPullToRefreshLayout.setRefreshing(false); } }); } catch (Exception e) { e.printStackTrace(); } catch (OutOfMemoryError e) { e.printStackTrace(); } } }).start(); } private ArrayList<User> users = new ArrayList<User>(); private PeopleArrayAdapter adapter; }