From 07bf74ebc716512c3c987e921bcf3fa6d44a46a8 Mon Sep 17 00:00:00 2001 From: hussienalrubaye Date: Mon, 14 Nov 2016 03:22:18 -0500 Subject: [PATCH] readme --- TwitterApp/README.md | 13 + TwitterApp/TwitterDem/.gitignore | 0 TwitterApp/TwitterDem/.idea/misc.xml | 2 +- TwitterApp/TwitterDem/.idea/modules.xml | 2 +- TwitterApp/TwitterDem/app/.gitignore | 0 TwitterApp/TwitterDem/app/build.gradle | 2 +- .../TwitterDem/app/google-services.json | 92 +---- TwitterApp/TwitterDem/app/proguard-rules.pro | 0 .../twitterdem/ExampleInstrumentedTest.java | 0 .../app/src/main/AndroidManifest.xml | 0 .../com/alrubaye/twitterdem/AdapterItems.java | 0 .../java/com/alrubaye/twitterdem/Login.java | 252 ++++++------ .../com/alrubaye/twitterdem/MainActivity.java | 366 +++++++++--------- .../com/alrubaye/twitterdem/Operations.java | 0 .../com/alrubaye/twitterdem/SaveSettings.java | 5 +- .../com/alrubaye/twitterdem/SearchType.java | 0 .../app/src/main/res/drawable/add.png | Bin .../app/src/main/res/drawable/background.xml | 0 .../app/src/main/res/drawable/barcolor.xml | 0 .../drawable/ic_account_circle_black_24dp.png | Bin .../drawable/ic_attach_file_black_24dp.png | Bin .../ic_favorite_border_black_24dp.png | Bin .../main/res/drawable/ic_home_black_24dp.png | Bin .../main/res/drawable/ic_home_white_24dp.png | Bin .../main/res/drawable/ic_send_black_24dp.png | Bin .../app/src/main/res/drawable/persoicon.png | Bin 0 -> 14927 bytes .../app/src/main/res/drawable/tweets.png | Bin .../app/src/main/res/drawable/twitter.jpg | Bin .../src/main/res/layout-hdpi/tweet_item.xml | 168 ++++++++ .../src/main/res/layout-xhdpi/tweet_item.xml | 168 ++++++++ .../src/main/res/layout-xxhdpi/tweet_item.xml | 168 ++++++++ .../main/res/layout-xxxhdpi/tweet_item.xml | 168 ++++++++ .../src/main/res/layout/activity_login.xml | 16 +- .../app/src/main/res/layout/activity_main.xml | 0 .../app/src/main/res/layout/tweet_add.xml | 0 .../app/src/main/res/layout/tweet_item.xml | 0 .../app/src/main/res/layout/tweet_loading.xml | 0 .../app/src/main/res/layout/tweet_msg.xml | 0 .../app/src/main/res/menu/menu_main.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../app/src/main/res/values-w820dp/dimens.xml | 0 .../app/src/main/res/values/colors.xml | 0 .../app/src/main/res/values/dimens.xml | 0 .../app/src/main/res/values/strings.xml | 0 .../app/src/main/res/values/styles.xml | 0 .../alrubaye/twitterdem/ExampleUnitTest.java | 0 TwitterApp/TwitterDem/build.gradle | 0 TwitterApp/TwitterDem/gradle.properties | 0 .../gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 TwitterApp/TwitterDem/gradlew.bat | 0 TwitterApp/TwitterDem/settings.gradle | 0 56 files changed, 1012 insertions(+), 410 deletions(-) create mode 100644 TwitterApp/README.md mode change 100644 => 100755 TwitterApp/TwitterDem/.gitignore mode change 100644 => 100755 TwitterApp/TwitterDem/app/.gitignore mode change 100644 => 100755 TwitterApp/TwitterDem/app/build.gradle mode change 100644 => 100755 TwitterApp/TwitterDem/app/proguard-rules.pro mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/androidTest/java/com/alrubaye/twitterdem/ExampleInstrumentedTest.java mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/AndroidManifest.xml mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/AdapterItems.java mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/Login.java mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/MainActivity.java mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/Operations.java mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/SaveSettings.java mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/SearchType.java mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/drawable/add.png mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/drawable/background.xml mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/drawable/barcolor.xml mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/drawable/ic_account_circle_black_24dp.png mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/drawable/ic_attach_file_black_24dp.png mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/drawable/ic_favorite_border_black_24dp.png mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/drawable/ic_home_black_24dp.png mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/drawable/ic_home_white_24dp.png mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/drawable/ic_send_black_24dp.png create mode 100644 TwitterApp/TwitterDem/app/src/main/res/drawable/persoicon.png mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/drawable/tweets.png mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/drawable/twitter.jpg create mode 100644 TwitterApp/TwitterDem/app/src/main/res/layout-hdpi/tweet_item.xml create mode 100644 TwitterApp/TwitterDem/app/src/main/res/layout-xhdpi/tweet_item.xml create mode 100644 TwitterApp/TwitterDem/app/src/main/res/layout-xxhdpi/tweet_item.xml create mode 100644 TwitterApp/TwitterDem/app/src/main/res/layout-xxxhdpi/tweet_item.xml mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/layout/activity_login.xml mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/layout/activity_main.xml mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/layout/tweet_add.xml mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/layout/tweet_item.xml mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/layout/tweet_loading.xml mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/layout/tweet_msg.xml mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/menu/menu_main.xml mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/mipmap-hdpi/ic_launcher.png mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/mipmap-mdpi/ic_launcher.png mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/mipmap-xhdpi/ic_launcher.png mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/mipmap-xxhdpi/ic_launcher.png mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/values-w820dp/dimens.xml mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/values/colors.xml mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/values/dimens.xml mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/values/strings.xml mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/main/res/values/styles.xml mode change 100644 => 100755 TwitterApp/TwitterDem/app/src/test/java/com/alrubaye/twitterdem/ExampleUnitTest.java mode change 100644 => 100755 TwitterApp/TwitterDem/build.gradle mode change 100644 => 100755 TwitterApp/TwitterDem/gradle.properties mode change 100644 => 100755 TwitterApp/TwitterDem/gradle/wrapper/gradle-wrapper.jar mode change 100644 => 100755 TwitterApp/TwitterDem/gradle/wrapper/gradle-wrapper.properties mode change 100644 => 100755 TwitterApp/TwitterDem/gradlew.bat mode change 100644 => 100755 TwitterApp/TwitterDem/settings.gradle diff --git a/TwitterApp/README.md b/TwitterApp/README.md new file mode 100644 index 000000000000..5c9876335b58 --- /dev/null +++ b/TwitterApp/README.md @@ -0,0 +1,13 @@ +##Tweeter AAP. +###This app is socail media app that allows people to share thier photo's,status, and follow other people. +####The complete tutorial how to build it is on [UDEMY Android 7](https://www.udemy.com/android-tutorial-for-beginners/?instructorPreviewMode=guest) + + + +![main](http://attach.alruabye.net/androidTutorialForBeginners/tweeterapp/login.png) + + +![main](http://attach.alruabye.net/androidTutorialForBeginners/tweeterapp/tweet1.png) + +![main](http://attach.alruabye.net/androidTutorialForBeginners/tweeterapp/tweet2.png) + diff --git a/TwitterApp/TwitterDem/.gitignore b/TwitterApp/TwitterDem/.gitignore old mode 100644 new mode 100755 diff --git a/TwitterApp/TwitterDem/.idea/misc.xml b/TwitterApp/TwitterDem/.idea/misc.xml index 84cfd6708077..ede8dd6faf04 100644 --- a/TwitterApp/TwitterDem/.idea/misc.xml +++ b/TwitterApp/TwitterDem/.idea/misc.xml @@ -37,7 +37,7 @@ - + diff --git a/TwitterApp/TwitterDem/.idea/modules.xml b/TwitterApp/TwitterDem/.idea/modules.xml index 2bc9a4255897..668c33c340dd 100644 --- a/TwitterApp/TwitterDem/.idea/modules.xml +++ b/TwitterApp/TwitterDem/.idea/modules.xml @@ -2,7 +2,7 @@ - + diff --git a/TwitterApp/TwitterDem/app/.gitignore b/TwitterApp/TwitterDem/app/.gitignore old mode 100644 new mode 100755 diff --git a/TwitterApp/TwitterDem/app/build.gradle b/TwitterApp/TwitterDem/app/build.gradle old mode 100644 new mode 100755 index 8d0f545bf74c..d9d1914c779d --- a/TwitterApp/TwitterDem/app/build.gradle +++ b/TwitterApp/TwitterDem/app/build.gradle @@ -4,7 +4,7 @@ android { compileSdkVersion 25 buildToolsVersion "25.0.0" defaultConfig { - applicationId "com.alrubaye.twitterdem" + applicationId "com.alrubaye.twitterdemstart" minSdkVersion 12 targetSdkVersion 25 versionCode 1 diff --git a/TwitterApp/TwitterDem/app/google-services.json b/TwitterApp/TwitterDem/app/google-services.json index cc9148e82ceb..8030cf38a112 100644 --- a/TwitterApp/TwitterDem/app/google-services.json +++ b/TwitterApp/TwitterDem/app/google-services.json @@ -1,35 +1,35 @@ { "project_info": { - "project_number": "21845150751", - "firebase_url": "https://firbasedemo-6228f.firebaseio.com", - "project_id": "firbasedemo-6228f", - "storage_bucket": "firbasedemo-6228f.appspot.com" + "project_number": "583184855128", + "firebase_url": "https://twitter-app-f69e8.firebaseio.com", + "project_id": "twitter-app-f69e8", + "storage_bucket": "twitter-app-f69e8.appspot.com" }, "client": [ { "client_info": { - "mobilesdk_app_id": "1:21845150751:android:8592e90db472ebb7", + "mobilesdk_app_id": "1:583184855128:android:07389f7d5e0bcd17", "android_client_info": { - "package_name": "com.hussienalrubaye.androidfirebase" + "package_name": "com.alrubaye.twitterdemstart" } }, "oauth_client": [ { - "client_id": "21845150751-tiq6jqsk2ndfvlvgtnlc659jsakg5csn.apps.googleusercontent.com", + "client_id": "583184855128-qqqqlqmkih0ocqcu1rl0kjdcmq20uk7c.apps.googleusercontent.com", "client_type": 1, "android_info": { - "package_name": "com.hussienalrubaye.androidfirebase", + "package_name": "com.alrubaye.twitterdemstart", "certificate_hash": "76A07B52241638F10FB6D3CF8F6B855F929169DC" } }, { - "client_id": "21845150751-m2e88crhtgshikohp6jmeln4o4ut014k.apps.googleusercontent.com", + "client_id": "583184855128-u7mnqrfajk8p3risq27mm7n339m8i41j.apps.googleusercontent.com", "client_type": 3 } ], "api_key": [ { - "current_key": "AIzaSyBrmRClRWJF_SsRTnHUCufUo6808FJFa7I" + "current_key": "AIzaSyDBd05ZSdlPaklsg_QiRk6bLNzZe7HUfyA" } ], "services": { @@ -40,7 +40,7 @@ "status": 2, "other_platform_oauth_client": [ { - "client_id": "21845150751-m2e88crhtgshikohp6jmeln4o4ut014k.apps.googleusercontent.com", + "client_id": "583184855128-u7mnqrfajk8p3risq27mm7n339m8i41j.apps.googleusercontent.com", "client_type": 3 } ] @@ -49,76 +49,6 @@ "status": 2 } } - }, - { - "client_info": { - "mobilesdk_app_id": "1:21845150751:android:679da90dbe15c5b2", - "android_client_info": { - "package_name": "com.alrubye.firstapp" - } - }, - "oauth_client": [ - { - "client_id": "21845150751-5tk4fg7c1k9l81ll5q8lihmtnp1olt0c.apps.googleusercontent.com", - "client_type": 1, - "android_info": { - "package_name": "com.alrubye.firstapp", - "certificate_hash": "76A07B52241638F10FB6D3CF8F6B855F929169DC" - } - }, - { - "client_id": "21845150751-m2e88crhtgshikohp6jmeln4o4ut014k.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyBrmRClRWJF_SsRTnHUCufUo6808FJFa7I" - } - ], - "services": { - "analytics_service": { - "status": 1 - }, - "appinvite_service": { - "status": 1, - "other_platform_oauth_client": [] - }, - "ads_service": { - "status": 2 - } - } - }, - { - "client_info": { - "mobilesdk_app_id": "1:21845150751:android:3162a499db69de48", - "android_client_info": { - "package_name": "com.alrubaye.twitterdem" - } - }, - "oauth_client": [ - { - "client_id": "21845150751-m2e88crhtgshikohp6jmeln4o4ut014k.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyBrmRClRWJF_SsRTnHUCufUo6808FJFa7I" - } - ], - "services": { - "analytics_service": { - "status": 1 - }, - "appinvite_service": { - "status": 1, - "other_platform_oauth_client": [] - }, - "ads_service": { - "status": 2 - } - } } ], "configuration_version": "1" diff --git a/TwitterApp/TwitterDem/app/proguard-rules.pro b/TwitterApp/TwitterDem/app/proguard-rules.pro old mode 100644 new mode 100755 diff --git a/TwitterApp/TwitterDem/app/src/androidTest/java/com/alrubaye/twitterdem/ExampleInstrumentedTest.java b/TwitterApp/TwitterDem/app/src/androidTest/java/com/alrubaye/twitterdem/ExampleInstrumentedTest.java old mode 100644 new mode 100755 diff --git a/TwitterApp/TwitterDem/app/src/main/AndroidManifest.xml b/TwitterApp/TwitterDem/app/src/main/AndroidManifest.xml old mode 100644 new mode 100755 diff --git a/TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/AdapterItems.java b/TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/AdapterItems.java old mode 100644 new mode 100755 diff --git a/TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/Login.java b/TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/Login.java old mode 100644 new mode 100755 index 4c1213e9b0bf..2c9aa7f9f6da --- a/TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/Login.java +++ b/TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/Login.java @@ -51,8 +51,6 @@ public class Login extends AppCompatActivity { EditText etEmail; EditText etPassword; ImageView ivUserImage; - int RESULT_LOAD_IMAGE=111; //any number for tag - //1- define private static final String TAG = "AnonymousAuth"; // [START declare_auth] @@ -73,12 +71,11 @@ protected void onCreate(Bundle savedInstanceState) { @Override public void onClick(View view) { - CheckUserPermsions(); + CheckUserPermsions(); } }); - //2- initiailze OnCreate() - // [START initialize_auth] + mAuth = FirebaseAuth.getInstance(); // [END initialize_auth] @@ -98,36 +95,17 @@ public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { } }; } - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - - if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { - Uri selectedImage = data.getData(); - String[] filePathColumn = {MediaStore.Images.Media.DATA}; - - Cursor cursor = getContentResolver().query(selectedImage, - filePathColumn, null, null, null); - cursor.moveToFirst(); - - int columnIndex = cursor.getColumnIndex(filePathColumn[0]); - String picturePath = cursor.getString(columnIndex); - cursor.close(); - ivUserImage.setImageBitmap(BitmapFactory.decodeFile(picturePath)); - - } - } public void buLogin(View view) { showProgressDialog(); FirebaseStorage storage=FirebaseStorage.getInstance(); // Create a storage reference from our app - StorageReference storageRef = storage.getReferenceFromUrl("gs://firbasedemo-6228f.appspot.com"); + StorageReference storageRef = storage.getReferenceFromUrl("gs://twitter-app-f69e8.appspot.com"); DateFormat df = new SimpleDateFormat("ddMMyyHHmmss"); Date dateobj = new Date(); - // System.out.println(df.format(dateobj)); + // System.out.println(df.format(dateobj)); // Create a reference to "mountains.jpg" - final String ImagePath= df.format(dateobj) +".jpg"; + final String ImagePath= df.format(dateobj) +".jpg"; StorageReference mountainsRef = storageRef.child("images/"+ ImagePath); ivUserImage.setDrawingCacheEnabled(true); ivUserImage.buildDrawingCache(); @@ -157,89 +135,16 @@ public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { } catch (UnsupportedEncodingException e) { } + //TODO: login and register String url="http://10.0.2.2/~hussienalrubaye/twitterserver/register.php?first_name="+name+"&email="+etEmail.getText().toString()+"&password="+etPassword.getText().toString()+"&picture_path="+ downloadUrl; new MyAsyncTaskgetNews().execute(url); + //hideProgressDialog(); } }); } - // get news from server - public class MyAsyncTaskgetNews extends AsyncTask { - @Override - protected void onPreExecute() { - //before works - } - @Override - protected String doInBackground(String... params) { - // TODO Auto-generated method stub - try { - String NewsData; - //define the url we have to connect with - URL url = new URL(params[0]); - //make connect with url and send request - HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); - //waiting for 7000ms for response - urlConnection.setConnectTimeout(7000);//set timeout to 5 seconds - - try { - //getting the response data - InputStream in = new BufferedInputStream(urlConnection.getInputStream()); - //convert the stream to string - Operations operations=new Operations(getApplicationContext()); - NewsData = operations.ConvertInputToStringNoChange(in); - //send to display data - publishProgress(NewsData); - } finally { - //end connection - urlConnection.disconnect(); - } - - }catch (Exception ex){} - return null; - } - protected void onProgressUpdate(String... progress) { - - try { - JSONObject json= new JSONObject(progress[0]); - //display response data - if (json.getString("msg")==null) - return; - if (json.getString("msg").equalsIgnoreCase("user is added")) { - Toast.makeText(getApplicationContext(), json.getString("msg"), Toast.LENGTH_LONG).show(); -//login - String url="http://10.0.2.2/~hussienalrubaye/twitterserver/login.php?email="+etEmail.getText().toString()+"&password="+etPassword.getText().toString() ; - - new MyAsyncTaskgetNews().execute(url); - } - - if (json.getString("msg").equalsIgnoreCase("Pass Login")) { - JSONArray UserInfo=new JSONArray( json.getString("info")); - JSONObject UserCreintal= UserInfo.getJSONObject(0); - //Toast.makeText(getApplicationContext(),UserCreintal.getString("user_id"),Toast.LENGTH_LONG).show(); - hideProgressDialog(); - SaveSettings saveSettings= new SaveSettings(getApplicationContext()); - saveSettings.SaveData(UserCreintal.getString("user_id")); - finish(); //close this activity - } - - } catch (Exception ex) { - Log.d("er", ex.getMessage()); - } - - - } - - protected void onPostExecute(String result2){ - - - } - - - - - } // [START on_start_add_listener] @Override @@ -260,7 +165,7 @@ public void onStop() { hideProgressDialog(); } private void signInAnonymously() { - // [START signin_anonymously] + // [START signin_anonymously] mAuth.signInAnonymously() .addOnCompleteListener(this, new OnCompleteListener() { @Override @@ -281,26 +186,6 @@ public void onComplete(@NonNull Task task) { } - @VisibleForTesting - public ProgressDialog mProgressDialog; - - public void showProgressDialog() { - if (mProgressDialog == null) { - mProgressDialog = new ProgressDialog(this); - mProgressDialog.setMessage("loading"); - mProgressDialog.setIndeterminate(true); - } - - mProgressDialog.show(); - } - - public void hideProgressDialog() { - if (mProgressDialog != null && mProgressDialog.isShowing()) { - mProgressDialog.dismiss(); - } - } - - void CheckUserPermsions(){ if ( Build.VERSION.SDK_INT >= 23){ if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE) != @@ -337,6 +222,7 @@ public void onRequestPermissionsResult(int requestCode, String[] permissions, in } } + int RESULT_LOAD_IMAGE=346; void LoadImage(){ Intent i = new Intent( Intent.ACTION_PICK, @@ -344,4 +230,124 @@ void LoadImage(){ startActivityForResult(i, RESULT_LOAD_IMAGE); } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { + Uri selectedImage = data.getData(); + String[] filePathColumn = {MediaStore.Images.Media.DATA}; + + Cursor cursor = getContentResolver().query(selectedImage, + filePathColumn, null, null, null); + cursor.moveToFirst(); + + int columnIndex = cursor.getColumnIndex(filePathColumn[0]); + String picturePath = cursor.getString(columnIndex); + cursor.close(); + ivUserImage.setImageBitmap(BitmapFactory.decodeFile(picturePath)); + + } + } + + + + // loading display + + @VisibleForTesting + public ProgressDialog mProgressDialog; + + public void showProgressDialog() { + if (mProgressDialog == null) { + mProgressDialog = new ProgressDialog(this); + mProgressDialog.setMessage("loading"); + mProgressDialog.setIndeterminate(true); + } + + mProgressDialog.show(); + } + + public void hideProgressDialog() { + if (mProgressDialog != null && mProgressDialog.isShowing()) { + mProgressDialog.dismiss(); + } + } + + // get news from server + public class MyAsyncTaskgetNews extends AsyncTask { + @Override + protected void onPreExecute() { + //before works + } + @Override + protected String doInBackground(String... params) { + // TODO Auto-generated method stub + try { + String NewsData; + //define the url we have to connect with + URL url = new URL(params[0]); + //make connect with url and send request + HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); + //waiting for 7000ms for response + urlConnection.setConnectTimeout(7000);//set timeout to 5 seconds + + try { + //getting the response data + InputStream in = new BufferedInputStream(urlConnection.getInputStream()); + //convert the stream to string + Operations operations=new Operations(getApplicationContext()); + NewsData = operations.ConvertInputToStringNoChange(in); + //send to display data + publishProgress(NewsData); + } finally { + //end connection + urlConnection.disconnect(); + } + + }catch (Exception ex){} + return null; + } + protected void onProgressUpdate(String... progress) { + + try { + JSONObject json= new JSONObject(progress[0]); + //display response data + if (json.getString("msg")==null) + return; + if (json.getString("msg").equalsIgnoreCase("user is added")) { + Toast.makeText(getApplicationContext(), json.getString("msg"), Toast.LENGTH_LONG).show(); +//login + String url="http://10.0.2.2/~hussienalrubaye/twitterserver/login.php?email="+etEmail.getText().toString()+"&password="+etPassword.getText().toString() ; + + new MyAsyncTaskgetNews().execute(url); + } + + if (json.getString("msg").equalsIgnoreCase("Pass Login")) { + JSONArray UserInfo=new JSONArray( json.getString("info")); + JSONObject UserCreintal= UserInfo.getJSONObject(0); + //Toast.makeText(getApplicationContext(),UserCreintal.getString("user_id"),Toast.LENGTH_LONG).show(); + hideProgressDialog(); + SaveSettings saveSettings= new SaveSettings(getApplicationContext()); + saveSettings.SaveData(UserCreintal.getString("user_id")); + finish(); //close this activity + } + + } catch (Exception ex) { + Log.d("er", ex.getMessage()); + } + + + } + + protected void onPostExecute(String result2){ + + + } + + + + + } + + } diff --git a/TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/MainActivity.java b/TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/MainActivity.java old mode 100644 new mode 100755 index b01021be377e..10d7f3c3359e --- a/TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/MainActivity.java +++ b/TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/MainActivity.java @@ -40,6 +40,7 @@ import com.google.firebase.storage.UploadTask; import com.squareup.picasso.Picasso; + import org.json.JSONArray; import org.json.JSONObject; @@ -57,12 +58,15 @@ public class MainActivity extends AppCompatActivity { //adapter class ArrayList listnewsData = new ArrayList(); - MyCustomAdapter myadapter; + int StartFrom=0; + int UserOperation=SearchType.MyFollowing; // 0 my followers post 2- specifc user post 3- search post + String Searchquery; int totalItemCountVisible=0; //totalItems visible LinearLayout ChannelInfo; TextView txtnamefollowers; int SelectedUserID=0; Button buFollow; + MyCustomAdapter myadapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -71,47 +75,21 @@ protected void onCreate(Bundle savedInstanceState) { ChannelInfo.setVisibility(View.GONE); txtnamefollowers=(TextView)findViewById(R.id.txtnamefollowers) ; buFollow=(Button)findViewById(R.id.buFollow); - SaveSettings saveSettings= new SaveSettings(getApplicationContext()); - saveSettings.LoadData(); + SaveSettings saveSettings= new SaveSettings(getApplicationContext()); + saveSettings.LoadData(); - //add data and view it - // listnewsData.add(new AdapterItems( null, null,null,"add",null,null ,null)); myadapter=new MyCustomAdapter(this,listnewsData); ListView lsNews=(ListView)findViewById(R.id.LVNews); lsNews.setAdapter(myadapter);//intisal with data LoadTweets(0,SearchType.MyFollowing); - // list view scrool - lsNews.setOnScrollListener(new AbsListView.OnScrollListener() { - @Override - public void onScrollStateChanged(AbsListView view, int scrollState) { -// scroll up loading - } - - @Override - public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { - //firstVisibleItem it have been seen - //visibleItemCount visible now - totalItemCountVisible=firstVisibleItem + visibleItemCount; - if(totalItemCountVisible== totalItemCount) - { - - if (listnewsData.size()>5) - if (!listnewsData.get(listnewsData.size()-1).tweet_date.equals("loading") - && !listnewsData.get(0).tweet_date.equals("loading")) - LoadTweets(listnewsData.size()-1,UserOperation); - - } - - - } - }); - } public void buFollowers(View view) { +//TODO: add code s=for subscribe and un subscribe + int Operation; // 1- subsribe 2- unsubscribe String Follow=buFollow.getText().toString(); @@ -124,15 +102,66 @@ public void buFollowers(View view) { buFollow.setText("Follow"); } - String url="http://10.0.2.2/~hussienalrubaye/twitterserver/userfollowing.php?user_id="+SaveSettings.UserID +"&following_user_id="+SelectedUserID+"&op="+ Operation; + String url="http://10.0.2.2/~hussienalrubaye/twitterserver/userfollowing.php?user_id="+SaveSettings.UserID +"&following_user_id="+SelectedUserID+"&op="+ Operation; new MyAsyncTaskgetNews().execute(url); + } + + SearchView searchView; + Menu myMenu; + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.menu_main, menu); + myMenu=menu; + // Associate searchable configuration with the SearchView + SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); + searchView = (android.widget.SearchView) menu.findItem(R.id.searchbar).getActionView(); + searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); + //final Context co=this; + searchView.setOnQueryTextListener(new android.widget.SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String query) { + // Toast.makeText(co, query, Toast.LENGTH_LONG).show(); + Searchquery=null; + try { + //for space with name + Searchquery = java.net.URLEncoder.encode(query , "UTF-8"); + } catch (UnsupportedEncodingException e) { + + } + //TODO: search in posts + LoadTweets(0,SearchType.SearchIn);// seearch + return false; + } + + @Override + public boolean onQueryTextChange(String newText) { + return false; + } + }); + // searchView.setOnCloseListener(this); + return true; + } + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle item selection + switch (item.getItemId()) { + case R.id.home: + //TODO: main search + LoadTweets(0,SearchType.MyFollowing); + return true; + + default: + return super.onOptionsItemSelected(item); + } } + private class MyCustomAdapter extends BaseAdapter { public ArrayList listnewsDataAdpater ; -Context context; + Context context; public MyCustomAdapter(Context context,ArrayList listnewsDataAdpater) { this.listnewsDataAdpater=listnewsDataAdpater; this.context=context; @@ -164,7 +193,7 @@ public View getView(int position, View convertView, ViewGroup parent) LayoutInflater mInflater = getLayoutInflater(); View myView = mInflater.inflate(R.layout.tweet_add, null); - final EditText etPost = (EditText) myView.findViewById(R.id.etPost); + final EditText etPost = (EditText) myView.findViewById(R.id.etPost); ImageView iv_post=(ImageView) myView.findViewById(R.id.iv_post) ; @@ -172,12 +201,13 @@ public View getView(int position, View convertView, ViewGroup parent) iv_attach.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - LoadImage(); + LoadImage(); } }); iv_post.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { + String tweets=null; try { //for space with name @@ -216,12 +246,14 @@ else if(s.tweet_date.equals("notweet")) { txtUserName.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { + SelectedUserID=Integer.parseInt(s.user_id); LoadTweets(0,SearchType.OnePerson); txtnamefollowers.setText(s.first_name); - SelectedUserID=Integer.parseInt(s.user_id); + String url="http://10.0.2.2/~hussienalrubaye/twitterserver/isfollowing.php?user_id="+SaveSettings.UserID +"&following_user_id="+SelectedUserID; new MyAsyncTaskgetNews().execute(url); + } }); TextView txt_tweet = (TextView) myView.findViewById(R.id.txt_tweet); @@ -231,16 +263,107 @@ public void onClick(View view) { txt_tweet_date.setText(s.tweet_date); ImageView tweet_picture=(ImageView)myView.findViewById(R.id.tweet_picture); - Picasso.with(context).load(s.tweet_picture).into(tweet_picture); + Picasso.with(context).load(s.tweet_picture).into(tweet_picture); ImageView picture_path=(ImageView)myView.findViewById(R.id.picture_path); - Picasso.with(context).load(s.picture_path).into(picture_path); + Picasso.with(context).load(s.picture_path).into(picture_path); return myView; } } + + //load image } + //load image + //pop + + @VisibleForTesting + public ProgressDialog mProgressDialog; + + public void showProgressDialog() { + if (mProgressDialog == null) { + mProgressDialog = new ProgressDialog(this); + mProgressDialog.setMessage("loading"); + mProgressDialog.setIndeterminate(true); + } + + mProgressDialog.show(); + } + + public void hideProgressDialog() { + if (mProgressDialog != null && mProgressDialog.isShowing()) { + mProgressDialog.dismiss(); + } + } + + + //save image + int RESULT_LOAD_IMAGE=233; + void LoadImage(){ + Intent i = new Intent( + Intent.ACTION_PICK, + android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + + startActivityForResult(i, RESULT_LOAD_IMAGE); + } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { + Uri selectedImage = data.getData(); + String[] filePathColumn = {MediaStore.Images.Media.DATA}; + + Cursor cursor = getContentResolver().query(selectedImage, + filePathColumn, null, null, null); + cursor.moveToFirst(); + + int columnIndex = cursor.getColumnIndex(filePathColumn[0]); + String picturePath = cursor.getString(columnIndex); + cursor.close(); + // postImage.setImageBitmap(BitmapFactory.decodeFile(picturePath)); + uploadimage( BitmapFactory.decodeFile(picturePath)); + } + } + String downloadUrl=null; + // ImageView postImage = new ImageView(this); + public void uploadimage(Bitmap bitmap ) { + showProgressDialog(); + FirebaseStorage storage=FirebaseStorage.getInstance(); + // Create a storage reference from our app + StorageReference storageRef = storage.getReferenceFromUrl("gs://twitter-app-f69e8.appspot.com"); + DateFormat df = new SimpleDateFormat("ddMMyyHHmmss"); + Date dateobj = new Date(); + // System.out.println(df.format(dateobj)); +// Create a reference to "mountains.jpg" + String mydownloadUrl=SaveSettings.UserID+ "_"+ df.format(dateobj) +".jpg"; + StorageReference mountainsRef = storageRef.child("images/"+ mydownloadUrl); + // postImage.setDrawingCacheEnabled(true); + // postImage.buildDrawingCache(); + // Bitmap bitmap = imageView.getDrawingCache(); + // BitmapDrawable drawable=(BitmapDrawable)postImage.getDrawable(); + // Bitmap bitmap =drawable.getBitmap(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); + byte[] data = baos.toByteArray(); + + UploadTask uploadTask = mountainsRef.putBytes(data); + uploadTask.addOnFailureListener(new OnFailureListener() { + @Override + public void onFailure(@NonNull Exception exception) { + // Handle unsuccessful uploads + } + }).addOnSuccessListener(new OnSuccessListener() { + @Override + public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { + // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL. + downloadUrl = taskSnapshot.getDownloadUrl().toString(); + hideProgressDialog(); + } + }); + } + // get news from server public class MyAsyncTaskgetNews extends AsyncTask { @Override @@ -285,7 +408,7 @@ protected void onProgressUpdate(String... progress) { return; if (json.getString("msg").equalsIgnoreCase("tweet is added")) { - LoadTweets(1,UserOperation); + LoadTweets(0,UserOperation); } else if (json.getString("msg").equalsIgnoreCase("has tweet")) { if(StartFrom==0) { @@ -308,7 +431,7 @@ else if (json.getString("msg").equalsIgnoreCase("has tweet")) { listnewsData.add(new AdapterItems(js.getString("tweet_id"), js.getString("tweet_text"),js.getString("tweet_picture") , js.getString("tweet_date") ,js.getString("user_id") ,js.getString("first_name") - ,js.getString("picture_path") )); + ,js.getString("picture_path") )); } @@ -316,7 +439,7 @@ else if (json.getString("msg").equalsIgnoreCase("has tweet")) { } - else if (json.getString("msg").equalsIgnoreCase("no tweet")) { + else if (json.getString("msg").equalsIgnoreCase("no tweet")) { //remove we are loading now if(StartFrom==0) { listnewsData.clear(); @@ -327,7 +450,7 @@ else if (json.getString("msg").equalsIgnoreCase("no tweet")) { //remove we are loading now listnewsData.remove(listnewsData.size()-1); } - // listnewsData.remove(listnewsData.size()-1); + // listnewsData.remove(listnewsData.size()-1); listnewsData.add(new AdapterItems(null, null, null, "notweet", null, null, null)); } @@ -360,160 +483,14 @@ protected void onPostExecute(String result2){ } - SearchView searchView; - Menu myMenu; - @Override - public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.menu_main, menu); - myMenu=menu; - // Associate searchable configuration with the SearchView - SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); - searchView = (android.widget.SearchView) menu.findItem(R.id.searchbar).getActionView(); - searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); - //final Context co=this; - searchView.setOnQueryTextListener(new android.widget.SearchView.OnQueryTextListener() { - @Override - public boolean onQueryTextSubmit(String query) { - // Toast.makeText(co, query, Toast.LENGTH_LONG).show(); - Searchquery=null; - try { - //for space with name - Searchquery = java.net.URLEncoder.encode(query , "UTF-8"); - } catch (UnsupportedEncodingException e) { - - } - LoadTweets(0,SearchType.SearchIn);// seearch - return false; - } - - @Override - public boolean onQueryTextChange(String newText) { - return false; - } - }); - // searchView.setOnCloseListener(this); - return true; - } - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // Handle item selection - switch (item.getItemId()) { - case R.id.home: - LoadTweets(0,SearchType.MyFollowing); - return true; - - default: - return super.onOptionsItemSelected(item); - } - } - - //pop - - @VisibleForTesting - public ProgressDialog mProgressDialog; - - public void showProgressDialog() { - if (mProgressDialog == null) { - mProgressDialog = new ProgressDialog(this); - mProgressDialog.setMessage("loading"); - mProgressDialog.setIndeterminate(true); - } - - mProgressDialog.show(); - } - - public void hideProgressDialog() { - if (mProgressDialog != null && mProgressDialog.isShowing()) { - mProgressDialog.dismiss(); - } - } - - - //save image - int RESULT_LOAD_IMAGE=233; - void LoadImage(){ - Intent i = new Intent( - Intent.ACTION_PICK, - android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); - - startActivityForResult(i, RESULT_LOAD_IMAGE); - } - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - - if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { - Uri selectedImage = data.getData(); - String[] filePathColumn = {MediaStore.Images.Media.DATA}; - - Cursor cursor = getContentResolver().query(selectedImage, - filePathColumn, null, null, null); - cursor.moveToFirst(); - - int columnIndex = cursor.getColumnIndex(filePathColumn[0]); - String picturePath = cursor.getString(columnIndex); - cursor.close(); - // postImage.setImageBitmap(BitmapFactory.decodeFile(picturePath)); - uploadimage( BitmapFactory.decodeFile(picturePath)); - } - } - String downloadUrl=null; - // ImageView postImage = new ImageView(this); - public void uploadimage(Bitmap bitmap ) { - showProgressDialog(); - FirebaseStorage storage=FirebaseStorage.getInstance(); - // Create a storage reference from our app - StorageReference storageRef = storage.getReferenceFromUrl("gs://firbasedemo-6228f.appspot.com"); - DateFormat df = new SimpleDateFormat("ddMMyyHHmmss"); - Date dateobj = new Date(); - // System.out.println(df.format(dateobj)); -// Create a reference to "mountains.jpg" - String mydownloadUrl=SaveSettings.UserID+ "_"+ df.format(dateobj) +".jpg"; - StorageReference mountainsRef = storageRef.child("images/"+ mydownloadUrl); - // postImage.setDrawingCacheEnabled(true); - // postImage.buildDrawingCache(); - // Bitmap bitmap = imageView.getDrawingCache(); - // BitmapDrawable drawable=(BitmapDrawable)postImage.getDrawable(); - // Bitmap bitmap =drawable.getBitmap(); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); - byte[] data = baos.toByteArray(); - - UploadTask uploadTask = mountainsRef.putBytes(data); - uploadTask.addOnFailureListener(new OnFailureListener() { - @Override - public void onFailure(@NonNull Exception exception) { - // Handle unsuccessful uploads - } - }).addOnSuccessListener(new OnSuccessListener() { - @Override - public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { - // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL. - downloadUrl = taskSnapshot.getDownloadUrl().toString(); - hideProgressDialog(); - } - }); - } - - - - - protected void onResume(){ - super.onResume(); - // LoadTweets(); - } - int StartFrom=0; - int UserOperation=SearchType.MyFollowing; // 0 my followers post 2- specifc user post 3- search post - String Searchquery; void LoadTweets(int StartFrom,int UserOperation){ this.StartFrom=StartFrom; this.UserOperation=UserOperation; //display loading if(StartFrom==0) // add loading at beggining - listnewsData.add(0,new AdapterItems(null, null, null, - "loading", null, null, null)); - else // add loading at end + listnewsData.add(0,new AdapterItems(null, null, null, + "loading", null, null, null)); + else // add loading at end listnewsData.add(new AdapterItems(null, null, null, "loading", null, null, null)); @@ -521,8 +498,10 @@ void LoadTweets(int StartFrom,int UserOperation){ String url="http://10.0.2.2/~hussienalrubaye/twitterserver/tweetlist.php?user_id="+ SaveSettings.UserID + "&StartFrom="+StartFrom + "&op="+ UserOperation; - if (UserOperation==3) - url="http://10.0.2.2/~hussienalrubaye/twitterserver/tweetlist.php?user_id="+ SaveSettings.UserID + "&StartFrom="+StartFrom + "&op="+ UserOperation + "&query="+ Searchquery; + if (UserOperation==SearchType.SearchIn) + url="http://10.0.2.2/~hussienalrubaye/twitterserver/tweetlist.php?user_id="+ SaveSettings.UserID + "&StartFrom="+StartFrom + "&op="+ UserOperation + "&query="+ Searchquery; + if(UserOperation==SearchType.OnePerson) + url="http://10.0.2.2/~hussienalrubaye/twitterserver/tweetlist.php?user_id="+ SelectedUserID + "&StartFrom="+StartFrom + "&op="+ UserOperation; new MyAsyncTaskgetNews().execute(url); @@ -534,4 +513,5 @@ void LoadTweets(int StartFrom,int UserOperation){ } + } diff --git a/TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/Operations.java b/TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/Operations.java old mode 100644 new mode 100755 diff --git a/TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/SaveSettings.java b/TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/SaveSettings.java old mode 100644 new mode 100755 index 3544ed2b970a..9a95a55f6358 --- a/TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/SaveSettings.java +++ b/TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/SaveSettings.java @@ -10,9 +10,6 @@ public class SaveSettings { public static String UserID=""; - //https://firebasestorage.googleapis.com/v0/b/firbasedemo-6228f.appspot.com/o/images%2F32_131116124812.jpg?alt=media&token=0287e868-557b-431c-bccc-7245d5fe8fc6 - public static String ServerImages=""; - Context context; SharedPreferences ShredRef; @@ -25,7 +22,9 @@ void SaveData(String UserID){ SharedPreferences.Editor editor=ShredRef.edit(); editor.putString("UserID",UserID); + editor.commit(); + LoadData(); } void LoadData(){ diff --git a/TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/SearchType.java b/TwitterApp/TwitterDem/app/src/main/java/com/alrubaye/twitterdem/SearchType.java old mode 100644 new mode 100755 diff --git a/TwitterApp/TwitterDem/app/src/main/res/drawable/add.png b/TwitterApp/TwitterDem/app/src/main/res/drawable/add.png old mode 100644 new mode 100755 diff --git a/TwitterApp/TwitterDem/app/src/main/res/drawable/background.xml b/TwitterApp/TwitterDem/app/src/main/res/drawable/background.xml old mode 100644 new mode 100755 diff --git a/TwitterApp/TwitterDem/app/src/main/res/drawable/barcolor.xml b/TwitterApp/TwitterDem/app/src/main/res/drawable/barcolor.xml old mode 100644 new mode 100755 diff --git a/TwitterApp/TwitterDem/app/src/main/res/drawable/ic_account_circle_black_24dp.png b/TwitterApp/TwitterDem/app/src/main/res/drawable/ic_account_circle_black_24dp.png old mode 100644 new mode 100755 diff --git a/TwitterApp/TwitterDem/app/src/main/res/drawable/ic_attach_file_black_24dp.png b/TwitterApp/TwitterDem/app/src/main/res/drawable/ic_attach_file_black_24dp.png old mode 100644 new mode 100755 diff --git a/TwitterApp/TwitterDem/app/src/main/res/drawable/ic_favorite_border_black_24dp.png b/TwitterApp/TwitterDem/app/src/main/res/drawable/ic_favorite_border_black_24dp.png old mode 100644 new mode 100755 diff --git a/TwitterApp/TwitterDem/app/src/main/res/drawable/ic_home_black_24dp.png b/TwitterApp/TwitterDem/app/src/main/res/drawable/ic_home_black_24dp.png old mode 100644 new mode 100755 diff --git a/TwitterApp/TwitterDem/app/src/main/res/drawable/ic_home_white_24dp.png b/TwitterApp/TwitterDem/app/src/main/res/drawable/ic_home_white_24dp.png old mode 100644 new mode 100755 diff --git a/TwitterApp/TwitterDem/app/src/main/res/drawable/ic_send_black_24dp.png b/TwitterApp/TwitterDem/app/src/main/res/drawable/ic_send_black_24dp.png old mode 100644 new mode 100755 diff --git a/TwitterApp/TwitterDem/app/src/main/res/drawable/persoicon.png b/TwitterApp/TwitterDem/app/src/main/res/drawable/persoicon.png new file mode 100644 index 0000000000000000000000000000000000000000..10b9a5aa08ad7b6c58764a8a8753546260fde044 GIT binary patch literal 14927 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όbc$=buU)k$(+UGt<_$8_C&z; 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

&v810oxqRpF$cZhZ!XUNkIFN{BG8z2L>Rr%{4L zPf}8Ii$YAa(QSW%z;9gi#H5B)GMmIGMvkAB<3^ zGnuebxFM1*%9blgX1^k1j#cGNMn8N0=6~;i{;;MFf-T>>lgQESL2?QanG026cuVw}GSl!nXxL+CoUcSN8nN(4YhzdW z${XW>g`eNxLH&z;1vFOY9_g6O`=H|k9YGZaZF9IZ+dYps<{tvQWrSxA_!gm+Wdcn4 zHtBej^_?);?yz?NkM(qn*c;N`Gbk{*n?!V@4S%wc!SLx@H|f+$xx{PFAK}ITxX$Zx zVE%noXsII2@0ZX~U+p;nH=cU@>O@HmfcFj+p~leEjd#$`ekv$s+@|oMTBlUg{Jb{S|`tiGE z5DETYROTkL-L;DJkG8ENf#wmva%xQ2hUWkT5jR;!D4yPFjZtQYSW#!uNF`R>vO+4k zXGvgmDJ^h@{Nq;x;Sx~ncanP+hjW^q2v(!wnZMMh>@Av;uy(@2b-3Uezf*wMb_8(* zakYCXIiCSV4g8d`L?z0=n;+5)<}yU?{wS*TItIhsj94cUUGQ~;(LyS4&pv^82kv8M ze$;=mz`&&Ntm52D_;oEB1Ci8OiW(00cntI0Jr*AQHSifD zsJ?e_rQex9BL*NW-??z>XpBp`^3vZ}`(V#+IEB}`1E7VDN$a$pPGu!A%TXBKPiKLJ ziG?{mh`>Avkd2Do(V>%v^B?mwcQ{sOSb+$eb>Y=&EZ5a-(Iw!c-Gh1`0;AM67<-Qd z5TsUkC))omN_7Cz{p}tuljvJlOu4=){dcRkp~uA|ym?uh!yn|hmk<|?C{$yQ-aj)2 zgucbY>vT+{d@n2k$JMVgC(o!McUJTk7{pIX!Qw}$Tjr47msvmcSHqPDJ~VX>QT>Am z?;S=`YKY#s&<)(uh~=*tSKKO6>FO-mn&&1VfY9@6`fJV>&587Q zI^GT@DUU`3(`(T%ZN!9Lzkc=n!d(QqNfq?>V~TLdsITPr8jl8oPvNO5uf|ne7;d|H zbm<>kv?g!CE&FB6P{5K3uA$8R4e=cu_3F6I@!#ZE9f)(u6-N6xxl~A-x`)R%<}f(v zu6?!t!A?DfhdcWJuLb6v|KApv_l<_2pg?2had1X+=5Id1@oUlC64#z%fCqt(Jq^WIU-w{qV(r7eig!_g(&Xp)-Q)c-$VguqmkL_WVxqi|a&M{4D<0SpwMZB@UQKu~A*|5}}(qSRP;!;2nPLlD}oMGBLgUL!NR( ztz`eNZwr_l0bPU6^^Ppr;lbjsvCrN6CTU|-@Jo6Ai954sP*vV{NZKF0rlv?yLZ*2h8swj*-)uK&zQ QqbQ(#Q%}9@hE>S_0g?L`Z~y=R literal 0 HcmV?d00001 diff --git a/TwitterApp/TwitterDem/app/src/main/res/drawable/tweets.png b/TwitterApp/TwitterDem/app/src/main/res/drawable/tweets.png old mode 100644 new mode 100755 diff --git a/TwitterApp/TwitterDem/app/src/main/res/drawable/twitter.jpg b/TwitterApp/TwitterDem/app/src/main/res/drawable/twitter.jpg old mode 100644 new mode 100755 diff --git a/TwitterApp/TwitterDem/app/src/main/res/layout-hdpi/tweet_item.xml b/TwitterApp/TwitterDem/app/src/main/res/layout-hdpi/tweet_item.xml new file mode 100644 index 000000000000..0222313cf010 --- /dev/null +++ b/TwitterApp/TwitterDem/app/src/main/res/layout-hdpi/tweet_item.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TwitterApp/TwitterDem/app/src/main/res/layout-xhdpi/tweet_item.xml b/TwitterApp/TwitterDem/app/src/main/res/layout-xhdpi/tweet_item.xml new file mode 100644 index 000000000000..52b11c60a282 --- /dev/null +++ b/TwitterApp/TwitterDem/app/src/main/res/layout-xhdpi/tweet_item.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TwitterApp/TwitterDem/app/src/main/res/layout-xxhdpi/tweet_item.xml b/TwitterApp/TwitterDem/app/src/main/res/layout-xxhdpi/tweet_item.xml new file mode 100644 index 000000000000..ed77202c086b --- /dev/null +++ b/TwitterApp/TwitterDem/app/src/main/res/layout-xxhdpi/tweet_item.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TwitterApp/TwitterDem/app/src/main/res/layout-xxxhdpi/tweet_item.xml b/TwitterApp/TwitterDem/app/src/main/res/layout-xxxhdpi/tweet_item.xml new file mode 100644 index 000000000000..bc8150eb473c --- /dev/null +++ b/TwitterApp/TwitterDem/app/src/main/res/layout-xxxhdpi/tweet_item.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/TwitterApp/TwitterDem/app/src/main/res/layout/activity_login.xml b/TwitterApp/TwitterDem/app/src/main/res/layout/activity_login.xml old mode 100644 new mode 100755 index e9c3a5d6712d..531aef12c17d --- a/TwitterApp/TwitterDem/app/src/main/res/layout/activity_login.xml +++ b/TwitterApp/TwitterDem/app/src/main/res/layout/activity_login.xml @@ -26,6 +26,7 @@ android:id="@+id/etName" /> + android:layout_marginBottom="1dp" + android:layout_height="100pt" + android:layout_width="80pt" />