package activity;
import adapter.WebsiteAdapter;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.text.Editable;
import android.text.Html;
import android.text.TextWatcher;
import android.text.method.LinkMovementMethod;
import android.view.Menu;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.*;
import application.App;
import com.parse.ParseException;
import com.parse.ParseObject;
import com.parse.ParseQuery;
import com.softcsoftware.aio.R;
import data.HotSites;
import data.MusicSites;
import data.VideoSites;
import data.object_holder.Website;
import dialogs.MessageDialog;
import dialogs.OnClickButtonListener;
import dialogs.YesNoDialog;
import download_manager.services.DownloadService;
import org.androidannotations.annotations.*;
import system_core.SystemIntent;
import tools.DeviceUuidFactory;
import tools.LogUtils;
import tools.NetworkUtils;
import view_holder.Views;
import views.Sliding.SlidingView;
import java.net.URLEncoder;
import java.util.ArrayList;
import static application.App.log;
import static tools.UITool.createDialog;
import static view_holder.Views.dialog_fillParent;
@EActivity(R.layout.home_activity)
public class AHome extends ABase {
static final int MUSIC_ADAPTER = 5, VIDEO_ADAPTER = 4, HOT_ADAPTER = 3;
static final int WEBSITE = 0, SEARCH = 1;
int defaultListAdapter = VIDEO_ADAPTER;
int searchStatus = SEARCH;
@ViewById(R.id.edit_search)
EditText searchInput;
@ViewById(R.id.bnt_search)
ImageButton searchButton;
@ViewById(R.id.sliding_layout)
SlidingView slidingView;
@ViewById(R.id.list_view)
ListView listView;
Context context;
App application;
WebsiteAdapter videoListAdapter, musicListAdapter, hotListAdapter;
ArrayList<Website> videoSiteArray;
ArrayList<Website> musicSiteArray;
ArrayList<Website> hotSiteArray;
boolean is_download_running = false;
HotBookmarkOnClick hot_bookmark_on_click_listener;
@SystemService
InputMethodManager input_method_manager;
//Ad new choice dialog.
AddNewDialog addNewDialog;
SearchPopupMenu search_popup_menu;
AHomeListOnClick home_list_on_click_listener;
MessageDialog parseMessageDialog;
//=========================================================================================================//
@Click(R.id.option_button)
void navigation_option_button_press() {
try {
input_method_manager.hideSoftInputFromWindow(searchInput.getWindowToken(), 0);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
slidingView.toggleSidebar();
}
}, 44);
} catch (Exception error) {
slidingView.toggleSidebar();
error.printStackTrace();
}
}
@Click(R.id.add_new_download_button)
void show_add_new_dialog() {
if (addNewDialog == null)
addNewDialog = new AddNewDialog(context, app) {
@Override
protected void showDownloadMakerDialog(Object o) {
}
};
addNewDialog.showDialog();
}
@Click(R.id.bnt_search)
void search_popup() {
input_method_manager.hideSoftInputFromWindow(searchInput.getWindowToken(), 0);
String query = searchInput.getText().toString();
if (!query.equals("")) {
if (searchStatus == WEBSITE)
openWebsite(searchInput.getText().toString());
else if (searchStatus == SEARCH)
if (search_popup_menu == null)
search_popup_menu = new SearchPopupMenu(context, searchInput, vibrator) {
@Override
public void overridePendingTransition(int enter, int out) {
AHome.this.overridePendingTransition(enter, out);
}
@Override
public void searchGoogle(EditText searchInput, Class<AWeb> webClass) {
AHome.this.searchGoogle(searchInput, webClass);
}
@Override
public void showNetworkRetry(String searchQuery) {
AHome.this.showNetworkRetry(searchQuery);
}
@Override
public void openWebsite(String searchQuery) {
AHome.this.openWebsite(searchQuery);
}
};
search_popup_menu.show(context, searchButton);
} else {
makeToast(true, "Write something.");
}
}
@Click(R.id.download_manager)
void open_download_manager() {
Intent intent = new Intent(context, ADownloadManager.class);
intent.setAction(ACTION_OPEN);
startActivity(intent);
overridePendingTransition(R.anim.enter, R.anim.out);
}
@Click(R.id.youtube_video_downloader)
void open_youtube_site() {
String url = "http://youtube.com";
if (NetworkUtils.isNetworkAvailable(context)) {
Intent intent = new Intent(context, AWeb.class);
intent.setAction(ACTION_OPEN_WEBVIEW);
intent.putExtra(ACTION_LOAD_URL, url);
startActivity(intent);
overridePendingTransition(R.anim.enter, R.anim.out);
} else {
vibrator.vibrate(20);
showNetworkRetry(url);
}
}
@Click(R.id.video_websites)
void update_video_adapter() {
if (defaultListAdapter != VIDEO_ADAPTER) {
update_list_adapter(VIDEO_ADAPTER);
if (slidingView.isOpening())
slidingView.toggleSidebar();
} else vibrate();
}
@Click(R.id.music_websites)
void update_music_adapter() {
if (defaultListAdapter != MUSIC_ADAPTER) {
update_list_adapter(MUSIC_ADAPTER);
if (slidingView.isOpening()) slidingView.toggleSidebar();
} else vibrate();
}
@Click(R.id.hot_websites)
void update_hot_adapter() {
if (hot_bookmark_on_click_listener == null)
hot_bookmark_on_click_listener = new HotBookmarkOnClick(context, findViewById(R.id.hot_websites)) {
@Override
protected void makeToast(boolean willVibrate, String message) {
AHome.this.makeToast(willVibrate, message);
}
@Override
protected void onPassThePassword() {
if (defaultListAdapter != HOT_ADAPTER) {
update_list_adapter(HOT_ADAPTER);
if (slidingView.isOpening())
slidingView.toggleSidebar();
} else
vibrate();
}
};
hot_bookmark_on_click_listener.show();
}
@Click(R.id.share)
void share_with_friend() {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT,
"AIO Downloader app is the best app I've ever used so far for download all kind of" +
" things. The best part of it, It can download youtube and other flash video too." +
" Give it a try. http://bit.ly/1HtL56S ");
startActivity(Intent.createChooser(intent, "Share AIO Downloader via "));
}
@Click(R.id.update)
void check_new_update() {
if (NetworkUtils.isNetworkAvailable(context)) {
Intent intent = new Intent(context, AWeb.class);
intent.setAction(ACTION_OPEN_WEBVIEW);
intent.putExtra(ACTION_LOAD_URL,
"http://www.softcweb.com/2014/10/aio-video-downloader-android.html");
startActivity(intent);
} else
makeToast(true, "Network is not available.");
}
@Click(R.id.open_website)
void open_project_website() {
if (NetworkUtils.isNetworkAvailable(context)) {
Intent intent = new Intent(context, AWeb.class);
intent.setAction(ACTION_OPEN_WEBVIEW);
intent.putExtra(ACTION_LOAD_URL,
"https://sourceforge.net/projects/aio-video-download-manager/");
startActivity(intent);
} else
makeToast(true, "Network is not available.");
}
@Click(R.id.open_help)
void open_help_page() {
if (NetworkUtils.isNetworkAvailable(context)) {
Intent intent = new Intent(context, AWeb.class);
intent.setAction(ACTION_OPEN_WEBVIEW);
intent.putExtra(ACTION_LOAD_URL,
"http://www.softcweb.com/p/how-to-use-aio-video-download-manager.html");
startActivity(intent);
} else
makeToast(true, "Network is not available.");
}
@Click(R.id.setting)
void ope_app_settings() {
startActivity(new Intent(context, ASetting.class));
overridePendingTransition(R.anim.enter, R.anim.out);
}
@Click(R.id.report_bug)
void report_bug() {
try {
Intent intent = new Intent(Intent.ACTION_SEND);
String mail_id[] = {"shiba.spj@hotmail.com"};
intent.putExtra(Intent.EXTRA_EMAIL, mail_id);
intent.putExtra(Intent.EXTRA_SUBJECT, "Feedback/Report from AIO video downloader(" + "Code : " +
app.versionCode + "Name : " + app.versionName + ") | " + Build.VERSION.SDK_INT);
intent.setType("plain/text");
intent.putExtra(Intent.EXTRA_TEXT, "");
startActivity(intent);
} catch (Exception error) {
error.printStackTrace();
makeToast(true, "Error.");
}
}
@Click(R.id.facebook_like)
void open_facebook_app() {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri data = Uri.parse("http://www.facebook.com/softc.media");
intent.setData(data);
startActivity(intent);
}
@Click(R.id.twitter_follow)
void open_twitter_app() {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri data = Uri.parse("http://www.twitter.com/softc_media");
intent.setData(data);
startActivity(intent);
}
@Click(R.id.about_us)
void open_about_us() {
startActivity(new Intent(context, AAbout.class));
overridePendingTransition(R.anim.enter, R.anim.out);
}
@Click(R.id.privacy_policy)
void open_privacy_policy() {
if (NetworkUtils.isNetworkAvailable(context)) {
Intent intent = new Intent(context, AWeb.class);
intent.setAction(ACTION_OPEN_WEBVIEW);
intent.putExtra(ACTION_LOAD_URL,
"http://www.softcweb.com/p/blog-page_15.html");
startActivity(intent);
} else
makeToast(true, "Network is not available.");
}
@Click(R.id.legal_info)
void open_legal_info() {
startActivity(new Intent(context, ALegal_.class));
overridePendingTransition(R.anim.enter, R.anim.out);
}
//====================================================================================================//
@AfterViews
void open_website() {
if (home_list_on_click_listener == null) {
home_list_on_click_listener = new AHomeListOnClick(context, listView, searchInput) {
@Override
protected void openWebsite(String url) {
AHome.this.openWebsite(url);
}
@Override
protected void makeToast(boolean willVibrate, String message) {
AHome.this.makeToast(willVibrate, message);
}
@Override
protected int getDefaultListAdapter() {
return defaultListAdapter;
}
};
}
}
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
AdvertiseUtility.init_mobilecore_sdk(this);
context = AHome.this;
application = (App) getApplication();
}
@AfterViews
public void onCreateFinish() {
init_bookmark();
init_list_adapters();
update_list_adapter(defaultListAdapter);
init_sliding_listener();
init_search_text_watcher();
init_rate_check();
init_submit_name();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
try {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(searchInput.getWindowToken(), 0);
slidingView.toggleSidebar();
} catch (Exception error) {
error.printStackTrace();
slidingView.toggleSidebar();
}
return false;
}
@Override
public void onPause() {
super.onPause();
}
@Override
public void onBackPressed() {
if (slidingView.isOpening()) {
slidingView.toggleSidebar();
} else {
exit_activity();
}
}
@Override
public void onResume() {
super.onResume();
//reset list adapter.
update_list_adapter(defaultListAdapter);
init_check_message_from_parse();
}
@Override
public void onDestroy() {
try {
View slide_view = slidingView.get_slide_view();
View content_view = slidingView.get_content_view();
unbindView(slide_view);
unbindView(content_view);
if (slidingView.getBackground() != null)
slidingView.getBackground().setCallback(null);
slidingView.removeAllViews();
slidingView = null;
} catch (Exception error) {
error.printStackTrace();
}
Runtime.getRuntime().gc();
super.onDestroy();
try {
if (!is_download_running) {
//send a message to the downloadService to refresh the download system.
Intent intent = new Intent(context, DownloadService.class);
intent.setAction(SystemIntent.INTENT_ACTION_START_SERVICE);
intent.putExtra(SystemIntent.TYPE, SystemIntent.Types.STOP);
//start service.
startService(intent);
android.os.Process.killProcess(android.os.Process.myPid());
}
} catch (Exception error) {
error.printStackTrace();
}
}
void init_bookmark() {
videoSiteArray = new VideoSites().getSiteData(app);
musicSiteArray = new MusicSites().getSiteData(app);
hotSiteArray = new HotSites().getSiteData(app);
}
void init_list_adapters() {
videoListAdapter = new WebsiteAdapter(context, videoSiteArray);
musicListAdapter = new WebsiteAdapter(context, musicSiteArray);
hotListAdapter = new WebsiteAdapter(context, hotSiteArray);
}
void update_list_adapter(final int id) {
if (id == VIDEO_ADAPTER) {
listView.setAdapter(videoListAdapter);
defaultListAdapter = VIDEO_ADAPTER;
} else if (id == MUSIC_ADAPTER) {
listView.setAdapter(musicListAdapter);
defaultListAdapter = MUSIC_ADAPTER;
} else if (id == HOT_ADAPTER) {
listView.setAdapter(hotListAdapter);
defaultListAdapter = HOT_ADAPTER;
} else {
listView.setAdapter(videoListAdapter);
defaultListAdapter = VIDEO_ADAPTER;
}
}
void init_search_text_watcher() {
searchInput.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence input_text, int start, int before, int count) {
String text = input_text.toString();
if (text.toLowerCase().startsWith("https://") ||
text.toLowerCase().startsWith("http://") || text.toLowerCase().startsWith("www.")) {
searchButton.setImageDrawable(getResources().getDrawable(R.drawable.ic_go));
searchStatus = WEBSITE;
} else {
searchStatus = SEARCH;
searchButton.setImageDrawable(getResources().getDrawable(R.drawable.ic_search));
}
}
@Override
public void afterTextChanged(Editable input_text) {
}
});
}
void init_sliding_listener() {
slidingView.setListener(new SlidingView.Listener() {
@Override
public void onSidebarOpened() {
}
@Override
public void onSidebarClosed() {
}
@Override
public boolean onContentTouchedWhenOpening() {
return false;
}
});
}
void init_submit_name() {
String name = app.getPreference().getString("NAME_USER", null);
if (name == null) {
final Dialog dialog = createDialog(context, R.layout.abs_create_new_file);
dialog.setCancelable(false);
dialog.show();
TextView title = (TextView) dialog.findViewById(R.id.title);
title.setText("Provide us your name");
title.setCompoundDrawables(null, null, resources.getDrawable(R.drawable.ic_about_us), null);
title.setClickable(true);
title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String message = "The name you provides to us will be very helpful for our internal research and analysis " +
"of the application. We are under obligation to not share your private information for any " +
" purpose. <br/>" +
"<a href=\"\">Please see our privacy policy for more about how we use your private information. </a>";
MessageDialog messageDialog = new MessageDialog(context, null, true, message);
messageDialog.hideTitle(true);
messageDialog.show();
}
});
((TextView) dialog.findViewById(R.id.n0)).setText("YOUR NAME :");
final EditText inputName = (EditText) dialog.findViewById(R.id.name_edit);
inputName.setTextSize(INPUT_SIZE);
inputName.setHint("your name");
TextView submit = (TextView) dialog.findViewById(R.id.download);
submit.setTextSize(DEFAULT_SIZE);
submit.setText("Submit");
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (inputName.getText().length() < 1) {
makeToast(true, "please give us your name.");
} else {
app.getPreference().edit().putString("NAME_USER", inputName.getText().toString())
.commit();
dialog.dismiss();
}
}
});
}
}
@Background(id = "check_message_from_parse")
void init_check_message_from_parse() {
final String id = app.getPreference().getString("USER_NAME_ID", "N/A");
if (!id.equals("N/A")) {
ParseQuery<ParseObject> query = ParseQuery.getQuery("USER_MESSAGE");
//search for the device id.
ParseQuery<ParseObject> parseQuery = query.whereContains("Id",
new DeviceUuidFactory(this).getDeviceUuid().toString());
try {
final ParseObject parseObject = parseQuery.getFirst();
log('d', getClass().getName(),
"Message fetching..........Parse the database successfully.............");
String name = parseObject.getString("Name");
String message = parseObject.getString("Message");
String deviceId = parseObject.getString("Id");
if (App.account.deviceID.equals(deviceId)) {
show_message_from_parse(parseObject, name, message);
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}
@UiThread
void show_message_from_parse(final ParseObject parseObject, String name, String message) {
parseMessageDialog = new MessageDialog(context, "Dear, " + name, "");
parseMessageDialog.hideTitle(false);
TextView textView = parseMessageDialog.getMessageView();
textView.setText(Html.fromHtml(message));
textView.setMovementMethod(LinkMovementMethod.getInstance());
final CheckBox checkBox = parseMessageDialog.getDontShowCheckBox();
checkBox.setVisibility(View.VISIBLE);
parseMessageDialog.setListener(new OnClickButtonListener() {
@Override
public void onOKClick(Dialog d, View v) {
d.dismiss();
if (checkBox.isChecked()) {
parseObject.put("Id", "Seen");
parseObject.saveInBackground();
}
}
});
if (!parseMessageDialog.getDialog().isShowing())
parseMessageDialog.show();
}
/**
* Check if the user is enable for rating app.
*/
private void init_rate_check() {
if (application.getDataHandler().getCompleteCDM().getDatabase().size() > 3)
if (app.getPreference().getString("Rate", "No").equals("No"))
func_rate_dialog(app.getPreference());
}
private void searchGoogle(EditText edit_input, Class<?> _class) {
try {
String text = edit_input.getText().toString();
String query = URLEncoder.encode(text, "UTF-8");
String url = (_class.equals(AWeb.class)) ?
"http://google.com/m?q=" + query :
"http://m.youtube.com/results?gl=IN&hl=en&client=mv-google&q=" + query + "&submit=Search";
Intent intent = new Intent(context, _class);
intent.setAction((_class.equals(AWeb.class) ? ACTION_OPEN_WEBVIEW : ACTION_OPEN_YOUTUBE));
intent.putExtra(ACTION_LOAD_URL, url);
if (text.length() > 0) {
if (NetworkUtils.isNetworkAvailable(context)) {
startActivity(intent);
} else {
makeToast(true, " network's not available. ");
}
} else {
makeToast(true, " type some keyword. ");
}
} catch (Exception error) {
error.printStackTrace();
LogUtils.writeError(error, null);
}
}
private void func_rate_dialog(final SharedPreferences preferences) {
final String messageString = "Please take a moment to rate AIO Video downloader" +
" and write your comment.\n"
+ "Hit a like at our facebook page for future update.";
YesNoDialog builder = new YesNoDialog(context, messageString, new YesNoDialog.OnClick() {
@SuppressLint("CommitPrefEdits")
@Override
public void onYesClick(Dialog dialog, TextView view) {
dialog.dismiss();
try {
Intent intent = new Intent(Intent.ACTION_SEND);
String mail_id[] = {"shiba.spj@hotmail.com"};
intent.putExtra(Intent.EXTRA_EMAIL, mail_id);
intent.putExtra(Intent.EXTRA_SUBJECT, "Rating of AIO Download Manager[ "
+ getPackageManager().getPackageInfo(getPackageName(), 0).versionName
+ " ] | [ Build Version : " + Build.VERSION.SDK_INT + " ] ");
intent.setType("plain/text");
intent.putExtra(Intent.EXTRA_TEXT, "");
preferences.edit().putString("Rate", "Done").commit();
startActivity(intent);
} catch (Exception error) {
error.printStackTrace();
}
}
@Override
public void onNoClick(Dialog dialog, TextView view) {
dialog.dismiss();
}
});
builder.minimize.setVisibility(View.VISIBLE);
builder.minimize.setText("Like Page");
builder.minimize.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri data = Uri.parse("http://www.facebook.com/softc.media");
intent.setData(data);
startActivity(intent);
}
});
builder.yes_bnt.setText("Rate");
builder.no_bnt.setText("Not Now ");
builder.dialog.show();
}
void exit_activity() {
final Dialog dialog = createDialog(this, R.layout.abs_network_check_retry);
dialog.show();
TextView message = (TextView) dialog.findViewById(R.id.message);
if (application.getDataHandler().getRunningDownloadTask().size() > 0) {
String minimize_message = "Exiting this app may close all running downloads. " +
"Are you sure about exit this application ?";
message.setText(minimize_message);
is_download_running = true;
} else {
String exit_normal = "Are you sure about exit ?";
message.setText(exit_normal);
is_download_running = false;
}
message.setLineSpacing(1.0f, 1.1f);
TextView yes = (TextView) dialog.findViewById(R.id.yes);
yes.setText("Yes");
yes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
is_download_running = false;
//show exit app.
AdvertiseUtility.show_exit_ad(AHome.this);
}
});
TextView minimize_button = (TextView) dialog.findViewById(R.id.minimize);
Views.setTextView(minimize_button, "Minimise", DEFAULT_SIZE);
minimize_button.setVisibility(View.GONE);
if (is_download_running) {
minimize_button.setVisibility(View.VISIBLE);
}
minimize_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
finish();
}
});
TextView no_button = (TextView) dialog.findViewById(R.id.cancel);
no_button.setText("No");
no_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
}
});
}
private void showNetworkRetry(final String url) {
final Dialog dialog = new Dialog(context);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.setContentView(R.layout.abs_network_check_retry);
dialog_fillParent(dialog);
dialog.findViewById(R.id.minimize).setVisibility(View.GONE);
TextView message = (TextView) dialog.findViewById(R.id.message);
message.setText("Network unavailable. Please try again later. ");
TextView retry_button = (TextView) dialog.findViewById(R.id.yes);
retry_button.setText("Retry");
TextView cancel_button = (TextView) dialog.findViewById(R.id.cancel);
cancel_button.setText("Cancel");
dialog.show();
cancel_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
}
});
retry_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
if (NetworkUtils.isNetworkAvailable(context)) {
Intent intent = new Intent(context, AWeb.class);
intent.setAction(ACTION_OPEN_WEBVIEW);
intent.putExtra(ACTION_LOAD_URL, url);
startActivity(intent);
} else {
vibrator.vibrate(20);
showNetworkRetry(url);
}
}
});
}
/**
* Open web view activity for the given url.
*
* @param url the url to be opened.
*/
private void openWebsite(String url) {
if (NetworkUtils.isNetworkAvailable(context)) {
Intent intent = new Intent();
if (url.equals("http://youtube.com") || url.startsWith("http://m.youtube.com")) {
intent.setClass(context, AWeb.class);
intent.setAction(ACTION_OPEN_WEBVIEW);
intent.putExtra(ACTION_LOAD_URL, url);
startActivity(intent);
overridePendingTransition(R.anim.enter, R.anim.out);
} else {
intent.setClass(context, AWeb.class);
intent.setAction(ACTION_OPEN_WEBVIEW);
intent.putExtra(ACTION_LOAD_URL, url);
startActivity(intent);
overridePendingTransition(R.anim.enter, R.anim.out);
}
} else {
vibrator.vibrate(20);
showNetworkRetry(url);
}
}
void vibrate() {
vibrator.vibrate(20);
}
}