Skip to content

Commit

Permalink
Merge branch 'release/alpha-0.4.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
kb10uy committed Jan 10, 2016
2 parents 5f5cb8f + fae91d3 commit 0afdbe2
Show file tree
Hide file tree
Showing 23 changed files with 316 additions and 49 deletions.
24 changes: 10 additions & 14 deletions app/app.iml
Original file line number Diff line number Diff line change
Expand Up @@ -65,27 +65,21 @@
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/coverage-instrumented-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/debug" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.1.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/23.1.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.1.1/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/23.1.1/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.commit451/PhotoView/1.2.4/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jacoco" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaResources" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/libs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndk" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/release" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/tmp" />
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
<excludeFolder url="file://$MODULE_DIR$/build/retrolambda" />
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
Expand All @@ -100,13 +94,15 @@
<orderEntry type="library" exported="" name="twitter4j-stream-4.0.4" level="project" />
<orderEntry type="library" exported="" name="luaj-jse-3.0.1" level="project" />
<orderEntry type="library" exported="" name="joda-time-2.8" level="project" />
<orderEntry type="library" exported="" name="support-v4-23.1.1" level="project" />
<orderEntry type="library" exported="" name="twitter4j-media-support-4.0.4" level="project" />
<orderEntry type="library" exported="" name="support-v4-23.1.0" level="project" />
<orderEntry type="library" exported="" name="snakeyaml-1.12" level="project" />
<orderEntry type="library" exported="" name="twitter-text-1.6.1" level="project" />
<orderEntry type="library" exported="" name="twitter4j-core-4.0.4" level="project" />
<orderEntry type="library" exported="" name="support-annotations-23.1.1" level="project" />
<orderEntry type="library" exported="" name="appcompat-v7-23.1.1" level="project" />
<orderEntry type="library" exported="" name="okio-1.4.0" level="project" />
<orderEntry type="library" exported="" name="appcompat-v7-23.1.0" level="project" />
<orderEntry type="library" exported="" name="glide-3.6.0" level="project" />
<orderEntry type="library" exported="" name="support-annotations-23.1.0" level="project" />
<orderEntry type="module" module-name="bhavaagra" exported="" />
</component>
</module>
11 changes: 6 additions & 5 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ beta Bamiyan
10.x Ujimatsu
*/
def VERSION_MAJOR = 0
def VERSION_MINOR = 3
def VERSION_PATCH = 3
def VERSION_NAME = 'Dragonforce'
def VERSION_MINOR = 4
def VERSION_PATCH = 0
def VERSION_NAME = 'Bamiyan'

repositories {
mavenCentral()
Expand Down Expand Up @@ -96,13 +96,14 @@ retrolambda {
dependencies {
compile project(':bhavaagra')

compile 'com.android.support:appcompat-v7:23.1.0'
compile 'com.android.support:support-v4:23.1.0'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:support-v4:23.1.1'
//compile 'com.android.support:multidex:1.0.1'
compile 'org.twitter4j:twitter4j:4.0.4'
compile 'org.twitter4j:twitter4j-stream:4.0.4'
compile 'org.twitter4j:twitter4j-media-support:4.0.4'
compile 'org.twitter4j:twitter4j-http2-support:4.0.4'
compile 'com.twitter:twitter-text:1.6.1'
compile 'com.google.guava:guava:18.0'
compile 'io.realm:realm-android:0.84.0'
compile 'joda-time:joda-time:2.8'
Expand Down
56 changes: 55 additions & 1 deletion app/src/main/java/org/kb10uy/tencocoa/HomeTimeLineFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.AnimationUtils;
import android.widget.AbsListView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
Expand Down Expand Up @@ -63,6 +64,10 @@ public class HomeTimeLineFragment extends Fragment {
private long currentUserId;
private SharedPreferences pref;
private Drawable mFavoriteIcon;
private LinearLayout mUpdatePopup;
private TextView mUpdatePopupText;
private boolean mHasNewTweet = false;
private int mRestNewTweet = 0, mLastTotal = 0;

public HomeTimeLineFragment() {
// Required empty public constructor
Expand Down Expand Up @@ -99,8 +104,26 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
mPopupCaption = (TextView) view.findViewById(R.id.HomeTimeLineTextViewCaption);
mPopupDescription = (TextView) view.findViewById(R.id.HomeTimeLineTextViewDescription);
mPopup = (LinearLayout) view.findViewById(R.id.HomeTimeLinePopup);
mUpdatePopupText = (TextView) view.findViewById(R.id.HomeTimeLineUpdatePopupText);
mUpdatePopup = (LinearLayout) view.findViewById(R.id.HomeTimeLineUpdatePopup);

view.getContext().getTheme().resolveAttribute(R.attr.colorRetweetBackground, mRewteetBackgroundValue, true);
mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}

@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (firstVisibleItem < mRestNewTweet) {
rewriteNewTweets(--mRestNewTweet);
if (mRestNewTweet == 0) {
popdownNewTweets();
mHasNewTweet = false;
}
}
}
});

return view;
}
Expand Down Expand Up @@ -229,7 +252,22 @@ public void onHomeTimeLineStreamingStatus(Status status) {
tstatus.favorite();
}
realm.close();
mHandler.post(() -> mTimeLineAdapter.add(tstatus));
int prevCount = mTimeLineAdapter.getCount();
int y = mListView.getChildAt(0).getTop();
int item = mListView.getFirstVisiblePosition();

mHandler.post(() -> {
mTimeLineAdapter.add(tstatus);
if (item != 0 || y != 0) {
if (!mHasNewTweet) {
mHasNewTweet = true;
popupNewTweets();
mRestNewTweet = 0;
}
rewriteNewTweets(++mRestNewTweet);
mListView.setSelectionFromTop(item + 1, y);
}
});
}

public void addRestStatuses(List<Status> statuses) {
Expand Down Expand Up @@ -300,6 +338,22 @@ private void showNotificationPopup(int iconResource, User source, String caption
set.start();
}

private void popupNewTweets() {
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(getActivity(), R.animator.new_tweet_popup);
set.setTarget(mUpdatePopup);
set.start();
}

private void popdownNewTweets() {
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(getActivity(), R.animator.new_tweet_popdown);
set.setTarget(mUpdatePopup);
set.start();
}

private void rewriteNewTweets(int count) {
mUpdatePopupText.setText(getString(R.string.popup_update_count, count));
}

public void clearStatuses() {
mTimeLineAdapter.clear();
}
Expand Down
3 changes: 2 additions & 1 deletion app/src/main/java/org/kb10uy/tencocoa/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ public class MainActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
PreferenceManager.setDefaultValues(this, R.xml.settings_default, true);
pref = PreferenceManager.getDefaultSharedPreferences(this);
checkTheme();
super.onCreate(savedInstanceState);
Expand Down Expand Up @@ -243,7 +244,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int kc = event.getKeyCode();
if (event.getAction()==KeyEvent.ACTION_DOWN) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (kc) {
case KeyEvent.KEYCODE_BACK:
boolean fin = mBackDoubleTapHelper.onTap();
Expand Down
81 changes: 77 additions & 4 deletions app/src/main/java/org/kb10uy/tencocoa/NewStatusDialogFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,25 @@

import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.v4.app.DialogFragment;
import android.net.Uri;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.twitter.Extractor;

import org.kb10uy.bhavaagra.BhavaAgra;
import org.kb10uy.bhavaagra.Rhapsody;
import org.kb10uy.tencocoa.model.TencocoaHelper;
Expand All @@ -31,6 +40,10 @@ public class NewStatusDialogFragment extends DialogFragment {
private Status replyToStatus;
private List<Uri> mSelectedImage;
private SharedPreferences pref;
private LinearLayout mImagesLinearLayout;
private String mCurrentText = "";
private EditText mStatusText;
private TextView mTextLength;

public static NewStatusDialogFragment newInstance() {
return new NewStatusDialogFragment();
Expand Down Expand Up @@ -60,10 +73,12 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
final Dialog dialog = new Dialog(getActivity());
dialog.getWindow().requestFeature(STYLE_NO_TITLE);
dialog.setContentView(R.layout.fragment_new_status_dialog);
EditText teStatus = (EditText) dialog.findViewById(R.id.NewStatusDialogFragmentStatusText);
mStatusText = (EditText) dialog.findViewById(R.id.NewStatusDialogFragmentStatusText);
mTextLength = (TextView) dialog.findViewById(R.id.NewStatusDialogFragmentLengthText);
mImagesLinearLayout = (LinearLayout) dialog.findViewById(R.id.NewStatusDialogFragmentImages);

dialog.findViewById(R.id.NewStatusDialogFragmentButtonUpdateStatus).setOnClickListener(v -> {
String text = teStatus.getText().toString();
String text = mStatusText.getText().toString();
dismiss();
updateStatus(text);
});
Expand All @@ -80,20 +95,40 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
);
});

mStatusText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
mCurrentText = mStatusText.getText().toString();
recalculateLength(mCurrentText);
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void afterTextChanged(Editable s) {

}
});

mSelectedImage = new ArrayList<>();
Bundle arguments = getArguments();
if (arguments == null) return dialog;
Status reply = (Status) arguments.getSerializable("ReplyTo");
if (reply != null) {
replyToStatus = reply;
String template = TencocoaHelper.createReplyTemplate(new TencocoaStatus(reply));
teStatus.setText(template);
teStatus.setSelection(template.length());
mStatusText.setText(template);
mStatusText.setSelection(template.length());
((TextView) dialog.findViewById(R.id.NewStatusDialogFragmentTitle)).setText(getString(R.string.label_dialog_new_status_reply));
((TextView) dialog.findViewById(R.id.NewStatusDialogFragmentReplyUserName)).setText(reply.getUser().getName());
((TextView) dialog.findViewById(R.id.NewStatusDialogFragmentReplyText)).setText(reply.getText());
dialog.findViewById(R.id.NewStatusDialogFragmentReply).setVisibility(View.VISIBLE);
}

recalculateLength("");
return dialog;
}

Expand All @@ -104,6 +139,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
case INTENT_CAMERA:
if (resultCode == Activity.RESULT_OK) {
mSelectedImage = BhavaAgra.parse(data);
updateImageList();
}
return;
default:
Expand Down Expand Up @@ -139,6 +175,43 @@ public void onDetach() {
mListener = null;
}


private void updateImageList() {
if (mSelectedImage.size() == 0) {
mImagesLinearLayout.setVisibility(View.GONE);
mCurrentText = mStatusText.getText().toString();
recalculateLength(mCurrentText);
return;
}

mImagesLinearLayout.setVisibility(View.VISIBLE);
mImagesLinearLayout.removeAllViews();
LayoutInflater inflater = (LayoutInflater) getActivity().getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
for (Uri uri : mSelectedImage) {
View av = inflater.inflate(R.layout.item_status_image, mImagesLinearLayout, false);
ImageView imv = (ImageView) av.findViewById(R.id.StatusItemImageItem);
Glide.with(getActivity()).load(uri).into(imv);
mImagesLinearLayout.addView(av);
}
mCurrentText = mStatusText.getText().toString();
recalculateLength(mCurrentText);
}

private void recalculateLength(String s) {
int rawLength = s.trim().length();
Extractor ext = new Extractor();
List<String> urls = ext.extractURLs(s);
for (String u : urls) rawLength -= (u.length() - 23);
if (mSelectedImage.size() != 0) rawLength += 25;

StringBuilder sb = new StringBuilder();
sb.append(rawLength);
sb.append("/");
sb.append(140);

mTextLength.setText(sb.toString());
}

public interface NewStatusDialogFragmentInteractionListener {
void applyUpdateStatus(String status, List<Uri> mediaUris);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,16 @@
import android.app.Notification;
import android.app.NotificationManager;
import android.app.Service;
import android.content.ContentResolver;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Binder;
import android.os.IBinder;
import android.preference.PreferenceManager;
import android.provider.MediaStore;
import android.widget.Toast;

import org.kb10uy.tencocoa.model.TwitterAccountInformation;
Expand Down Expand Up @@ -95,23 +98,37 @@ protected String doInBackground(StatusUpdate... params) {
if (mPendingMediaUris.size() >= 0) {
List<UploadedMedia> media = new ArrayList<>();
for (Uri u : mPendingMediaUris) {
media.add(mTwitter.uploadMedia(new File(u.toString())));
String path = "";
if (u.getScheme().equals("content")) {
ContentResolver contentResolver = getApplicationContext().getContentResolver();
Cursor cursor = contentResolver.query(u, new String[]{MediaStore.MediaColumns.DATA}, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
path = cursor.getString(0);
cursor.close();
}
} else {
path = u.getPath();
}
media.add(mTwitter.uploadMedia(new File(path)));
}
mPendingMediaUris.clear();
target.setMediaIds(TwitterHelper.convertMediaIds(media));
long[] ids = TwitterHelper.convertMediaIds(media);
target.setMediaIds(ids);
}
mTwitter.tweets().updateStatus(target);
return "";
} catch (TwitterException e) {
e.printStackTrace();
return e.getErrorMessage();
mPendingMediaUris.clear();
return e.getMessage();
}
}

@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (result.equals("")) {
if (result != null && result.equals("")) {
showNotification(getString(R.string.notification_update_status_success), getString(R.string.notification_update_status_success));
} else {
StringBuilder sb = new StringBuilder();
Expand Down
Loading

0 comments on commit 0afdbe2

Please sign in to comment.