diff --git a/Android/Bharath/Advanced/MyNewsApp/.gitignore b/Android/Bharath/Advanced/MyNewsApp/.gitignore new file mode 100644 index 00000000..aa724b77 --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/Android/Bharath/Advanced/MyNewsApp/.idea/.gitignore b/Android/Bharath/Advanced/MyNewsApp/.idea/.gitignore new file mode 100644 index 00000000..26d33521 --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/Android/Bharath/Advanced/MyNewsApp/.idea/compiler.xml b/Android/Bharath/Advanced/MyNewsApp/.idea/compiler.xml new file mode 100644 index 00000000..fb7f4a8a --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Android/Bharath/Advanced/MyNewsApp/.idea/gradle.xml b/Android/Bharath/Advanced/MyNewsApp/.idea/gradle.xml new file mode 100644 index 00000000..5cd135a0 --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/Android/Bharath/Advanced/MyNewsApp/.idea/jarRepositories.xml b/Android/Bharath/Advanced/MyNewsApp/.idea/jarRepositories.xml new file mode 100644 index 00000000..0380d8d3 --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/.idea/jarRepositories.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Android/Bharath/Advanced/MyNewsApp/.idea/misc.xml b/Android/Bharath/Advanced/MyNewsApp/.idea/misc.xml new file mode 100644 index 00000000..6199cc2a --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/Android/Bharath/Advanced/MyNewsApp/.idea/runConfigurations.xml b/Android/Bharath/Advanced/MyNewsApp/.idea/runConfigurations.xml new file mode 100644 index 00000000..797acea5 --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/.idea/runConfigurations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/Android/Bharath/Advanced/MyNewsApp/app/.gitignore b/Android/Bharath/Advanced/MyNewsApp/app/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/Android/Bharath/Advanced/MyNewsApp/app/build.gradle b/Android/Bharath/Advanced/MyNewsApp/app/build.gradle new file mode 100644 index 00000000..95ff077d --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/app/build.gradle @@ -0,0 +1,45 @@ +plugins { + id 'com.android.application' +} + +android { + compileSdkVersion 30 + buildToolsVersion "30.0.3" + + defaultConfig { + applicationId "com.example.mynewsapp" + minSdkVersion 16 + targetSdkVersion 30 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + + implementation 'androidx.appcompat:appcompat:1.3.0' + implementation 'com.google.android.material:material:1.3.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + testImplementation 'junit:junit:4.+' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + implementation 'com.squareup.retrofit2:retrofit:2.4.0' + implementation 'com.google.code.gson:gson:2.6.2' + implementation 'com.squareup.retrofit2:converter-gson:2.4.0' + implementation 'com.android.volley:volley:1.1.0' + implementation 'com.google.android.material:material:1.0.0' + implementation 'com.squareup.picasso:picasso:2.71828' +} \ No newline at end of file diff --git a/Android/Bharath/Advanced/MyNewsApp/app/proguard-rules.pro b/Android/Bharath/Advanced/MyNewsApp/app/proguard-rules.pro new file mode 100644 index 00000000..481bb434 --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/Android/Bharath/Advanced/MyNewsApp/app/src/androidTest/java/com/example/mynewsapp/ExampleInstrumentedTest.java b/Android/Bharath/Advanced/MyNewsApp/app/src/androidTest/java/com/example/mynewsapp/ExampleInstrumentedTest.java new file mode 100644 index 00000000..d15be094 --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/app/src/androidTest/java/com/example/mynewsapp/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.example.mynewsapp; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.example.mynewsapp", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/Android/Bharath/Advanced/MyNewsApp/app/src/main/AndroidManifest.xml b/Android/Bharath/Advanced/MyNewsApp/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..f85a6311 --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/app/src/main/AndroidManifest.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/Adapter.java b/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/Adapter.java new file mode 100644 index 00000000..85184d05 --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/Adapter.java @@ -0,0 +1,94 @@ +//package com.example.mynewsapp; + +//public class Adapter { +//} +package com.example.mynewsapp; + +import android.content.Context; +import android.content.Intent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.example.mynewsapp.parameter.Articles; +import com.squareup.picasso.Picasso; + +import java.util.List; +import java.util.Locale; + +import androidx.annotation.NonNull; +import androidx.cardview.widget.CardView; +import androidx.recyclerview.widget.RecyclerView; + +public class Adapter extends RecyclerView.Adapter { + Context context; + List articles; + public Adapter(Context context, List articles) { + this.context = context; + this.articles = articles; + } + + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item,parent,false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + final Articles a=articles.get(position); + String url=a.getUrl(); + holder.tvTitle.setText(a.getTitle()); + //get source ke saath .getname lagana hai 32.36 part 1 + holder.tvSource.setText(a.getSource().getName()); + holder.tvDate.setText(a.getPublishedAt()); + + String imageUrl=a.getUrlToImage(); + //picasso ka syntax new 33.07 part1 + Picasso.get().load(imageUrl).into(holder.imageView); + holder.cardView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent=new Intent(context,NewsInDetails.class); + intent.putExtra("title",a.getTitle()); + intent.putExtra("source",a.getSource().getName()); + intent.putExtra("time",a.getPublishedAt()); + intent.putExtra("imageUrl",a.getUrlToImage()); + intent.putExtra("url",a.getUrl()); + intent.putExtra("decs",a.getDescription()); + context.startActivity(intent); + } + }); + } + + + @Override + public int getItemCount() { + return articles.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder { + TextView tvTitle,tvSource,tvDate; + ImageView imageView; + CardView cardView; + public ViewHolder(@NonNull View itemView) { + super(itemView); + + tvTitle=itemView.findViewById(R.id.tvId); + tvDate=itemView.findViewById(R.id.tvDate); + tvSource=itemView.findViewById(R.id.tvSource); + imageView=itemView.findViewById(R.id.image); + cardView=itemView.findViewById(R.id.cardView); + } + } + public String getCountry() + { + Locale locale=Locale.getDefault(); + String country=locale.getCountry(); + return country.toLowerCase(); + } +} diff --git a/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/Client.java b/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/Client.java new file mode 100644 index 00000000..5f44a931 --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/Client.java @@ -0,0 +1,28 @@ +package com.example.mynewsapp; + +import retrofit2.Retrofit; +import retrofit2.converter.gson.GsonConverterFactory; + +@SuppressWarnings("ALL") +public class Client { + private static final String BASE_URL="https://newsapi.org/v2/"; + private static Client apiClient; + private static Retrofit retrofit; + private Client() + { + retrofit=new Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).build(); + } + + public static synchronized Client getInstance() + { + if (apiClient==null) + { + apiClient=new Client(); + } + return apiClient; + } + public Interface getApi() + { + return retrofit.create(Interface.class); + } +} diff --git a/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/Interface.java b/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/Interface.java new file mode 100644 index 00000000..7eea748c --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/Interface.java @@ -0,0 +1,19 @@ +//package com.example.mynewsapp; + +//public interface Interface { +//} +package com.example.mynewsapp; + +import com.example.mynewsapp.parameter.Headlines; + +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface Interface { + @GET("top-headlines") + Call getHeadlines( + @Query("country") String country, + @Query("apiKey") String apiKey + ); +} \ No newline at end of file diff --git a/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/MainActivity.java b/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/MainActivity.java new file mode 100644 index 00000000..cd264ce6 --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/MainActivity.java @@ -0,0 +1,103 @@ +//package com.example.mynewsapp; + +//import androidx.appcompat.app.AppCompatActivity; + +//import android.os.Bundle; + +//public class MainActivity extends AppCompatActivity { + + // @Override + // protected void onCreate(Bundle savedInstanceState) { + // super.onCreate(savedInstanceState); + // setContentView(R.layout.activity_main); + //} +//} +package com.example.mynewsapp; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +//import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.ImageButton; +import android.widget.Toast; + +import com.example.mynewsapp.parameter.Articles; +import com.example.mynewsapp.parameter.Headlines; +import com.google.android.material.floatingactionbutton.FloatingActionButton; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +public class MainActivity extends AppCompatActivity { + RecyclerView recyclerView; + Adapter adapter; + final String API_KEY="de9933f6d1a54349816bafe67d051c28"; + Button button; + ImageButton floatingActionButton; + List articles=new ArrayList<>(); + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + recyclerView=findViewById(R.id.recyclerView); + button=findViewById(R.id.refreshButton); + recyclerView.setLayoutManager(new LinearLayoutManager(this)); + final String country=getCountry(); +// floatingActionButton=(ImageButton)findViewById(R.id.floating); +// floatingActionButton.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// // Intent intent=new Intent(MainActivity.this,Intro.class); +// //startActivity(intent); +// +// } +// }); + + retrieveJson(country,API_KEY); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + retrieveJson(country,API_KEY); + } + }); + } + public void retrieveJson(String country,String apiKey) + { + Call call=Client.getInstance().getApi().getHeadlines(country,apiKey); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful() && response.body().getArticles()!=null){ + articles.clear(); + articles=response.body().getArticles(); + + adapter =new Adapter(MainActivity.this, articles); + recyclerView.setAdapter(adapter); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + + Toast.makeText(MainActivity.this,"There is An Error",Toast.LENGTH_SHORT).show(); + } + }); + } + public String getCountry() + { + Locale locale=Locale.getDefault(); + String country=locale.getCountry(); + return country.toLowerCase(); + } +} \ No newline at end of file diff --git a/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/NewsInDetails.java b/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/NewsInDetails.java new file mode 100644 index 00000000..4feb77d9 --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/NewsInDetails.java @@ -0,0 +1,53 @@ +package com.example.mynewsapp; + +import androidx.appcompat.app.AppCompatActivity; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.ImageView; +import android.widget.TextView; + +import com.squareup.picasso.Picasso; + +public class NewsInDetails extends AppCompatActivity { + TextView tvTitle,tvSource,tvTime,tvDesc; + ImageView imageView; + WebView webView; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_news_in_details); + tvTitle=findViewById(R.id.tvId); + tvSource=findViewById(R.id.tvSource); + tvTime=findViewById(R.id.tvDate); + tvDesc=findViewById(R.id.tvDesc); + webView=findViewById(R.id.webView); + imageView=findViewById(R.id.image); + + Intent intent=getIntent(); + String title=intent.getStringExtra("title"); + String source=intent.getStringExtra("source"); + String time=intent.getStringExtra("time"); + String imageUrl=intent.getStringExtra("imageUrl"); + String url=intent.getStringExtra("url"); + String desc=intent.getStringExtra("desc"); + + + tvTitle.setText(title); + tvSource.setText(source); + tvTime.setText(time); + tvDesc.setText(desc); + + Picasso.get().load(imageUrl).into(imageView); + webView.getSettings().setDomStorageEnabled(true); + + webView.getSettings().setJavaScriptEnabled(true); + webView.getSettings().setLoadsImagesAutomatically(true); + webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); + webView.setWebViewClient(new WebViewClient()); + webView.loadUrl(url); + } +} \ No newline at end of file diff --git a/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/parameter/Articles.java b/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/parameter/Articles.java new file mode 100644 index 00000000..2cf22d79 --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/parameter/Articles.java @@ -0,0 +1,97 @@ +package com.example.mynewsapp.parameter; + +//public class Articles { +//} +//package com.example.newsapp.Model; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class Articles { + @SerializedName("source") + @Expose + private Source source; + @SerializedName("author") + @Expose + private String author; + @SerializedName("title") + @Expose + private String title; + @SerializedName("description") + @Expose + private String description; + @SerializedName("url") + @Expose + private String url; + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + @SerializedName("urlToImage") + @Expose + private String urlToImage; + @SerializedName("publishedAt") + @Expose + private String publishedAt; + + public Source getSource() { + + return source; + } + + public void setSource(Source source) { + + this.source = source; + } + + public String getAuthor() { + + return author; + } + + public void setAuthor(String author) { + + this.author = author; + } + + public String getTitle() { + + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + + this.description = description; + } + + public String getUrlToImage() { + + return urlToImage; + } + + public void setUrlToImage(String urlToImage) { + this.urlToImage = urlToImage; + } + + public String getPublishedAt() { + return publishedAt; + } + + public void setPublishedAt(String publishedAt) { + + this.publishedAt = publishedAt; + } +} diff --git a/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/parameter/Headlines.java b/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/parameter/Headlines.java new file mode 100644 index 00000000..c7e1b2f0 --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/parameter/Headlines.java @@ -0,0 +1,46 @@ +package com.example.mynewsapp.parameter; + +//public class Headlines { +//} +//package com.example.newsapp.Model; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class Headlines { + @SerializedName("status") + @Expose + private String status; + @SerializedName("totalResults") + @Expose + private String totalResults; + @SerializedName("articles") + @Expose + private List articles; + + public String getStatus() { + return status; + } + + public String getTotalResults() { + return totalResults; + } + + public void setTotalResults(String totalResults) { + this.totalResults = totalResults; + } + + public List getArticles() { + return articles; + } + + public void setArticles(List articles) { + this.articles = articles; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/parameter/Source.java b/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/parameter/Source.java new file mode 100644 index 00000000..23edbe29 --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/app/src/main/java/com/example/mynewsapp/parameter/Source.java @@ -0,0 +1,33 @@ +package com.example.mynewsapp.parameter; + +//public class Source { +//} +//package com.example.newsapp.Model; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +public class Source { + @SerializedName("id") + @Expose + private String id; + @SerializedName("name") + @Expose + private String name; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/Android/Bharath/Advanced/MyNewsApp/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/Android/Bharath/Advanced/MyNewsApp/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 00000000..2b068d11 --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Android/Bharath/Advanced/MyNewsApp/app/src/main/res/drawable/back_ground.xml b/Android/Bharath/Advanced/MyNewsApp/app/src/main/res/drawable/back_ground.xml new file mode 100644 index 00000000..7ba29366 --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/app/src/main/res/drawable/back_ground.xml @@ -0,0 +1,8 @@ + + + android:shape="rectangle"> + + + \ No newline at end of file diff --git a/Android/Bharath/Advanced/MyNewsApp/app/src/main/res/drawable/ic_launcher_background.xml b/Android/Bharath/Advanced/MyNewsApp/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 00000000..07d5da9c --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Android/Bharath/Advanced/MyNewsApp/app/src/main/res/layout/activity_main.xml b/Android/Bharath/Advanced/MyNewsApp/app/src/main/res/layout/activity_main.xml new file mode 100644 index 00000000..e9507bc0 --- /dev/null +++ b/Android/Bharath/Advanced/MyNewsApp/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,46 @@ + + + + + + + +